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

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

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

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

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

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

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

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

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

【问题讨论】:

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

标签: android multithreading android-contacts android-contentresolver


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2016-06-19
    • 2011-04-02
    相关资源
    最近更新 更多