Я разрабатываю приложение, где мне нужно вставить много контактов. В настоящее время около 600 контактов, в общей сложности 6000 номеров телефонов. Самый большой контакт имеет 1800 телефонных номеров.
Состояние на сегодняшний день состоит в том, что я создал пользовательскую учетную запись для хранения контактов, поэтому пользователь может выбрать, чтобы увидеть контакт в представлении "Контакты".
Но вставка контактов очень медленная. Я вставляю контакты, используя ContentResolver.applyBatch. Я пробовал с различными размерами списка ContentProviderOperation (100, 200, 400), но общее время работы составляет ок. тоже самое. Для вставки всех контактов и номеров требуется около 30 минут!
Большинство проблем, которые я нашел относительно медленной вставки в SQlite, вызывают транзакции. Но поскольку я использую метод ContentResolver.applyBatch, я не контролирую это, и я бы предположил, что ContentResolver позаботится об управлении транзакциями для меня.
Итак, на мой вопрос: я делаю что-то не так, или я могу что-то сделать, чтобы ускорить это?
Андерс
Edit: @jcwenger: О, я вижу. Хорошее объяснение!
Итак, мне нужно будет сначала вставить в таблицу raw_contacts, а затем данные с именами и цифрами. То, что я проиграю, это обратная ссылка на raw_id, которую я использую в applyBatch.
Итак, мне нужно будет получить все идентификаторы вновь вставленных строк raw_contacts для использования в качестве внешних ключей в таблице данных?