2017-04-19 2 views
3

한 번에 수천 개의 연락처를 추가하기 위해 ContentResolver.applyBatch 및 ContentResolver.bulkInsert 메서드를 사용하면 매우 느립니다. Android는 연락처를 일괄 적으로 추가하는 방식이 상당히 빠릅니다.프로그래밍 방식으로 수많은 Android 연락처를 대량으로 추가

지금까지 다음과 같은 접근 시도했습니다

:

  • 만들기 새로운 ContentValues는 반대 : 각 연락처에 대해

    applyBatch 사용 (~ 75초 천 당 연락처)

    을 원시 연락처를 나타내는

  • RawContacts 테이블에 삽입 할 새 ContentProviderOperation을 빌드하십시오.
  • 이 ContentValues에게 이름과 전화 번호 같은 다른 연락처 필드에 대한 객체를 생성 색인 목록에이 작업을 추가하고 저장
  • 원시 연락처에 역 참조와 데이터 테이블에 이들 각각을 삽입하는 새로운 ContentProviderOperation 구축 ,
  • 마지막으로 목록

에 이러한 작업을 추가 동작을 삽입 모든 작업을 적용 할 ContentResolver.applyBatch를 사용합니다. 각 연락처 bulkInsert (~ 40초 천 당 연락처)

를 사용

:

  • 새로운 ContentValues이를 삽입
  • 새로운 ContentProviderOperation을 구축 원시의 접촉을 표현하기 위해 객체 만들기 RawContacts 테이블에
  • 이 작업을 목록에 추가하십시오.

그런 다음 ContentResolver.applyBatch를 사용하여 모든 작업을 적용하십시오. ContentProviderResults의 배열을 반환합니다. 지금

각 연락처 :

  • 대응 ContentProviderResult로부터 원시 접촉 ID 파싱.
  • 데이터 테이블

질문에 이들을 삽입 원료 접촉 ID

  • 사용 ContentResolver.bulkInsert하는 필드와 연락처의 모든 데이터 필드에 대한 각각 ContentValues ​​오브젝트의 배열을 구축

    • 두 번째 방법에서는 먼저 RawContacts 테이블 항목에 applyBatch를 수행 한 다음 Entried 된 Data 테이블에 대해 bulkInsert를 수행합니다. 그렇지 않으면 데이터 항목에 원시 연락처 ID를 제공하는 방법을 찾을 수 없기 때문입니다. RawContacts와 Data 항목을 동시에 추가 할 수있는 bulkInsert의 역 참조와 비슷한 것이 있습니까?
    • applyBatch 및 bulkInsert는 트랜잭션이 너무 큼을 불평하기 전에 한 번에 많은 수의 삽입을 수행 할 수 있습니다. 결과적으로 그들은 500 명 정도의 접촉마다 적용되어야합니다. 이 한도를 변경할 수있는 방법이 있습니까?
    • 한 번에 수천 개의 연락처를 추가하는 완전히 다른 방법이 있습니까?
  • 답변

    관련 문제