【发布时间】: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