如何更快地读取android中的所有电话联系人?

Posted

技术标签:

【中文标题】如何更快地读取android中的所有电话联系人?【英文标题】:How to read all phone contacts in android faster? 【发布时间】:2015-08-24 04:47:21 【问题描述】:

我正在开发一个应用程序 (API > 15),它会读取所有电话联系人,然后建议所有使用我们应用程序的人。

所需数据: 1. 电话号码 2.电子邮件ID

流程是: 1.读取所有电话联系人 2. 将它们发送到服务器 3. 匹配现有联系人 4. 将匹配的联系人发送回客户端 5. 向用户推荐这些联系人。

现在的问题是我的手机中有近 2000 个联系人。为此,它需要 46 秒。这太多了。我不能让用户等这么久。

可能的解决方案: 分批读取联系人,每批 200 个联系人,每个联系人使用不同的线程。并行运行它们并合并结果。

问题 我试过了,但仍然花费了太多时间。我认为内容解析器是线程安全的。所以它仍然不能同时处理不同的线程请求并花费相同的时间。事实上比以前多一点。

我认为应该有一些其他解决方案,所有这些消息应用程序(如 whatsapp)都使用。有人知道吗?

我也可以发布代码,但这是每个人都使用的常见默认代码。我在那里做了所有类型的优化,包括不制作任何额外的字符串变量,这可能会让 android 一次又一次地运行垃圾收集器并增加处理时间。

【问题讨论】:

在这里查看我的答案:***.com/a/26820544/2252830 不管怎样,你为什么认为10+线程比1线程快? @moictab b'coz 他们可以并行运行。 多线程不会有多大帮助,基本上你获取所有手机联系人详细信息的算法很慢,你试过我的答案吗? @pskink 成功了!它非常快。节省了我很多时间。非常感谢。您介意指出导致速度如此之快的主要区别吗? 【参考方案1】:

当用户启动您的应用时,将所有内容放入服务中。在后台做所有事情。一旦你完成向用户弹出一些东西。 这就是现在正在做的事情,我希望能帮上忙。

【讨论】:

以上是关于如何更快地读取android中的所有电话联系人?的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 中从电话簿中读取联系人

Android通过电话号码有效地获取联系人姓名以在ListView中显示

java - 如何使用json中提供的多个联系人数据在java中的android中添加新的电话联系人

如何从电话簿中获取与 android 中特定联系人相关联的所有社交帐户?

如何从android中的给定电话号码获取电话号码类型标签

从 RawContact Android 读取电话号码