La inserción de miles de entradas de contactos usando applyBatch es lenta

Estoy desarrollando una aplicación donde necesito insertar muchas entradas de contacto. En la actualidad, aproximadamente 600 contactos con un total de 6000 números de teléfono. El contacto más grande tiene 1800 números de teléfono.

Status a partir de hoy es que he creado una cuenta personalizada para guardar los contactos, de modo que el usuario puede seleccionar ver el contacto en la vista Contactos.

Pero la inserción de los contactos es dolorosamente lenta. Inserto los contactos usando ContentResolver.applyBatch. He intentado con diferentes tamaños de la lista ContentProviderOperation (100, 200, 400), pero el tiempo total de ejecución es de aprox. lo mismo. ¡Insertar todos los contactos y números lleva unos 30 minutos!

La mayoría de los problemas que he encontrado con respecto a la inserción lenta en SQlite hace aparecer las transacciones. Pero como uso el método ContentResolver.applyBatch, no controlo esto, y supongo que ContentResolver se encarga de la administración de transacciones por mí.

Entonces, a mi pregunta: ¿estoy haciendo algo mal, o hay algo que pueda hacer para acelerar esto?

Anders

Editar @jcwenger: Oh, ya veo. ¡Buena explicación

Entonces, primero tendré que insertar en la tabla raw_contacts, y luego la tabla de datos con el nombre y los números. Lo que perderé es la referencia posterior al raw_id que uso en applyBatch.

¿Entonces tendré que obtener todos los identificadores de las filas raw_contacts recién insertadas para usar como claves externas en la tabla de datos?

Respuestas a la pregunta(7)

Su respuesta a la pregunta