微信通讯录好友检索怎么实现的?

heihuzi007 发布于 2013/08/06 20:05
阅读 6K+
收藏 0
现在要实现这么个功能,检索手机的通讯录。匹配数据库中手机号的字段,如果存在,就是加为好友,如果不存在就是邀请好友,但问题是这样的搜索效率得多低呀。。加入我通讯录里有100个联系人,岂不是每个手机号都要匹配一遍数据库,这要匹配100遍?!!有啥更好地方案不~~
加载中
0
iiiiiiiii
iiiiiiiii
就是手机号和微信号对应啊
0
xesam
xesam
100算啥啊...
0
William
William
當你的手機通訊錄超過100W再說...
0
atearsan
atearsan

FK...

我们最近就要模仿做这个- -!

最后在众多Coder极力说清效率的情况下, 改变了一个实现方式. 先显示List数据, 然后点击的时候拿号码跟服务器对比, 根据结果进入不同的activity, 显示不同的业务.

你那边根据业务来看看能不能改设计.

0
heihuzi007
heihuzi007

引用来自“atearsan”的答案

FK...

我们最近就要模仿做这个- -!

最后在众多Coder极力说清效率的情况下, 改变了一个实现方式. 先显示List数据, 然后点击的时候拿号码跟服务器对比, 根据结果进入不同的activity, 显示不同的业务.

你那边根据业务来看看能不能改设计.

好吧,我在想象办法~
0
BladeBao
BladeBao

服务端按照所有号码建排序堆,待检索号码尝试插入堆,在插入后的位置查找附近节点,有相同则命中,时间复杂度<= O(log2N)

0
酒逍遥
酒逍遥

一次性把 100个号码都检索出来...然后和数据库进行匹配. 一次就可以了.

返回匹配的结果就行.

0
黑狗
黑狗

引用来自“atearsan”的答案

FK...

我们最近就要模仿做这个- -!

最后在众多Coder极力说清效率的情况下, 改变了一个实现方式. 先显示List数据, 然后点击的时候拿号码跟服务器对比, 根据结果进入不同的activity, 显示不同的业务.

你那边根据业务来看看能不能改设计.

效率个啥啊 你最多就1W条通讯录 后台跑的线程 纠结那么多性能不如把经理放到业务上去思考问题。用map还是用list,不管是空间还是时间上,都是不会存在压力的
黑狗
黑狗
回复 @atearsan : 简单的说来就是《每次都对上一次的结果(本地值)进行分析,并且第二次以后的请求都是后台的进程在跑,不造成用户感知的问题》
黑狗
黑狗
回复 @atearsan : 判断本地“已注册好友列表”是否为空,如果为空,调用一次接口,将高于《版本号》的数据下载下来,保存到本地,否则,直接对比本地的列表。这个接口,同时上传自己的用户信息到服务端存起来,并且给这条数据打上版本号。 第二次以后的调用,判断“已注册好友列表”中,是否有版本号高于现在版本的数据,如果有,则进行更新(新增)。同时,调用请求。
atearsan
atearsan
回复 @黑狗 : 读取手机通讯录. 然后需要跟服务器进行手机号检查, 检查用户是否已注册帐号. 如果没注册, listView上面渲染一个邀请按钮.
黑狗
黑狗
回复 @atearsan : 先说数据量,300个人,我算你每个人5个电话,数据量1500,你读,不是读人,是读号码,通过号码去找人。你说的网络通讯,没搞懂,你的应用的人员列表难道是在线的??每次进去都读在线的人员列表??没本地列表?如果是在线的人员列表我建议你做缓存。每次只检测,只检测上一次缓存的信息。问题解决?
atearsan
atearsan
我这边测试的300多联系人从手机里加载到页面布局渲染完成, 要4s +. 有些人有几个号码, 这个得重新读一次的. 如果还得跟网络通讯, 进行数据对比, 更耗时间吧. 不知道你那边具体怎么实现的。
下一页
返回顶部
顶部