在Android上处理大量联系簿

时间:2016-07-26 21:41:14

标签: android json sqlite

背景: 似乎是一个已解决的问题:聊天应用程序希望将您的本地电话簿上传到他们自己的服务器以交叉检查这些号码,这​​样如果您的一个朋友已经注册了该服务,他们就会出现在列表中“他们与这些聊天”人们,他们也有App X“。

天真的解决方案: Android contacts Display Name and Phone Number(s) in single database query?

如上所述的方法查询电话上所有联系人数据的联系人ContentProvider。然后将此数据合并到联系人实体中,转换为JSON,并发送到服务器,在那里根据数据库检查电话和电子邮件凭据。

问题: 该解决方案由于多种原因而无法扩展。考虑类似于具有25,000个联系人的电话(这种情况发生在具有类似LDAP的企业用户)

  1. 查询本身将保存到应用程序中的sqlite数据库。这是必需的,以便可以使用已注册的联系人保存与域相关的数据模型内容,并且还可以使用邀请按钮显示未注册的联系人(想想WhatsApp等)。由于Cursor只能处理< = 1MB的结果集,因此查询整个表成为一个问题。
  2. 即使您可以将所有联系人都放入内存并将其转换为JSON,您现在看起来像2MB字符串一样上传到服务器进行同步。在糟糕的网络上,这可能需要很长时间。大多数情况下,这可以在后台完成,但在第一次加载和本地电话簿的任何后续更改(例如,如果您添加新的联系人,例如App X的用户)时,它将变得非常明显。
  3. 假设有一种方法可以在首次启动后上传增量,而不是每次电话簿更改时再次上传整个联系簿。即使这样,您也可以使用初始上传来阻止用户等待,或者在应用中结束用户并且不显示任何联系人。

    长话短说,我的问题是:

    1. 这怎么做得最好?大多数消息传递应用都没有考虑大型联系人列表吗?
    2. 如何让等待初始上传成为非可怕的用户体验?
    3. 我该如何测试这个案例?是否有一个工具可用于以编程方式将数千个联系人添加到地址簿中,还是我必须自己滚动?

0 个答案:

没有答案