以编程方式批量添加数千个Android联系人

以编程方式批量添加数千个Android联系人,第1张

概述使用ContentResolver.applyBatch和ContentResolver.bulkInsert方法一次性添加数千个联系人非常慢. Android是否提供了批量添加联系人的不同方式,这种方式会更快? 到目前为止,我尝试了以下方法: 使用applyBatch(每千个联系人约75秒) 对于每个联系人: >创建一个新的ContentValues对象以表示原始联系人 >构建一个新的Conte 使用ContentResolver.applyBatch和ContentResolver.bulkInsert方法一次性添加数千个联系人非常慢. Android是否提供了批量添加联系人的不同方式,这种方式会更快?

到目前为止,我尝试了以下方法:

使用applyBatch(每千个联系人约75秒)

对于每个联系人:

>创建一个新的ContentValues对象以表示原始联系人
>构建一个新的ContentProvIDerOperation以将其插入到RawContacts表中
>将此 *** 作添加到列表并存储其索引
>为名称和电话号码等其他联系人字段创建ContentValues对象
>构建一个新的ContentProvIDerOperation,将其中的每一个插入到Data表中,并对原始联系人插入 *** 作进行反向引用
>将这些 *** 作添加到列表中

最后,使用ContentResolver.applyBatch应用所有 *** 作.

使用bulkInsert(每千个联系人约40秒)

对于每个联系人:

>创建一个新的ContentValues对象以表示原始联系人
>构建一个新的ContentProvIDerOperation以将其插入到RawContacts表中
>将此 *** 作添加到列表中

然后,使用ContentResolver.applyBatch应用所有 *** 作.这将返回ContentProvIDerResults数组.

现在,对于每个联系人:

>从相应的ContentProvIDerResult中解析原始联系人ID.
>为联系人的所有数据字段构造一个ContentValues对象数组,每个数据字段都包含原始联系人ID的字段
>使用ContentResolver.bulkInsert将这些插入到数据表中

问题

>在第二种方法中,我首先对RawContacts表条目执行applyBatch,然后为所委托的Data表执行bulkInsert.这是因为我无法想办法为数据条目提供原始联系人ID.是否有类似于bulkInsert的反向引用,允许我同时添加RawContacts和Data条目?
> applyBatch和bulkInsert只能在抱怨事务太大之前在一个批处理中执行这么多插入.因此,每隔500个联系人就必须应用它们.有没有办法改变这个限制?
>是否有一些完全不同的,更快速的方式一次添加数千个联系人?

解决方法 你展示的第一种方法是正确的方法,然后比第二种方法更快,它也更安全.

当您在同一批处理 *** 作中同时插入RawContacts和Data时,如果在此过程中出现问题,数据库将回滚该批处理中的先前更改,因此您不会在任何一个表中留下任何僵尸信息.

为了加快速度,尝试在不同线程之间划分工作.

如果您有1000个联系人,请创建一个处理前500个的线程,另一个处理底部500个,并让它们同时运行.如果需要,您可以将其应用于更多线程.

总结

以上是内存溢出为你收集整理的以编程方式批量添加数千个Android联系人全部内容,希望文章能够帮你解决以编程方式批量添加数千个Android联系人所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1123975.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存