android 4.0联系人分析—查找匹配

本文详细介绍了Android 4.0系统中联系人过滤索引的建立过程及其查找匹配机制。从数据库表结构出发,解析了ContactsProvider2如何通过触发事务更新search_index表,并阐述了在联系人界面输入拼音首字母时,系统如何通过异步加载数据并匹配联系人的具体流程。

一、android 4.0 联系人过滤索引建立分析

联系人过滤索引的建立、修改是在新建、修改、删除或同步联系人的时候,触发ContactsProvider2更新联系人数据库中的search_index表的。

search_index表结构

字段版本数据类型外键非空
(默认值)
说明
contact_id INTEGERY 跟contact表的ID关联
content TEXT  联系人内容查找索引,包含单位、职位、邮件地址等,以空格分隔各个content
name TEXT  联系人姓名索引字段,包含多个索引,以空格分隔。
注:这将是我们查找内容的主要字段
tokens TEXT  电话号码查找索引,多个电话间以空格分隔

建立索引的步骤:

1. ContactsProvider2的applyBatch把从界面传过来的事务提交到ContactsProvider2.onCommit处理

2. onCommit调用ContactsProvider2.updateSearchIndexInTransaction

3. updateSearchIndexInTransaction调用SearchIndexManager.updateIndexForRawContacts

4. updateIndexForRawContacts调用SearchIndexManager的内部方法buildIndex

5. 在buildIndex中会针对每个字段调用相应DataRowHandlerForXXX.appendSearchableData方法
我们需要关注的DataRowHandlerForStructuredName类的appendSearchableData

6. 最终会调用NameLookupBuilder的appendToSearchIndex建立多个索引

二、android 4.0 联系人查找匹配

android 4.0 contact filt sequence

1. 点击联系人查找界面,输入拼音首字母,会触发PeopleActivity的onAction方法

2. 在onAction中调用ContactBrowseListFragment的setQueryString方法

3. setQueryString调用restartLoader来启动Loader异步更新数据

4. 在Loader的回调接口onCreateLoader配置Loader的参数,包括查询的Uri等。

5. Loader启动后会触发ContactProvider2的query,其处理所有的联系人信息查询.
   我们要关注的是queryLocal中的CONTACTS_FILTER分支。

6. 在ContactProvider2的appendSearchIndexJoin(StringBuilder, String…)方法中会建立查询SQLite数据库的SQL语句。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值