- Android contacts 联系人 通讯录 源码 完全解析
- 1简介
- 2软件架构
- 3各功能模块分析
- 1联系人数据的显示
- 1联系人列表显示
- 2联系人详细信息数据的显示
- 2数据存储相关
- 3Sim联系人数据的整合
- 1Sim卡联系人数据的显示
- 2开机自动导入Sim卡联系人
- 3telephony中IccProvider浅析
- 4Sim卡联系人的手动导入导出
- 4SD卡备份恢复联系人
- 1从Sd卡恢复import联系人数据
- 2联系人数据导出到Sd卡
- 5联系人搜索
- 6Google联系人同步
- 7其他零碎功能
- 1联系人数据的显示
1,简介:
本篇博文主要分析contacts,后续会分析contactsProvider。
联系人模块主要记录用户的联系人数据,方便用户快捷的操作和使用,主要包括本机联系人和Sim卡联系人。
本机联系人主要存储在手机内部存储空间,Android平台上是通过数据库进行存储,使用ContentProvider组件封装,提供复杂的字段用于表示联系人数据,并提供用户快捷的操作,比如增加,删除,修改,查询等等。
Sim卡联系人主要存储在Sim卡内部存储文件,包括adn、fdn、sdn。主要提供简单的字段用于表示联系人数据。并通过IccProvider提供的接口进行数据的增加、删除、修改、查询操作。
2,软件架构
联系人Contacts应用主要包括3个部分:
1. Contacts主要响应用户的请求和交互,数据显示。
2. ContactsProvider继承自Android四大组件之一的ContentProvider组件,封装了对底层数据库contact2.db的添删改查。
3. SQLite在底层物理性地存储了联系人数据。
主要交互流程如下图:
3,各功能模块分析:
3.1,联系人数据的显示:
1,联系人列表显示:
简要说明:
* PeopleActivity类负责联系人列表的显示。
* PeopleActivity包含4个Fragment,每个Fragment包含一个ListView。
* 各个Fragment中ListView的Adapter(BaseAdapter的子类)负责将数据填充到ListView。
* 各个Fragment的Loader类(CursorLoader的子类)负责加载数据。
* 实现LoadertManager接口负责管理这些CursorLoader。
流程具体分析:
先上图:
- 进入:
发现的祖父类是:首先分析此基类:
发现此基类实现了接口,实现了该接口3个重要的抽象方法:
这意味着,子类可以按需求创造自己的适配器Adapter类,完成各个子界面Listview的数据显示,如3.1节图1所示。
- 然后回到类:
在执行之前,会执行父类的一些方法,顺序如下:
发现在这里创建了:
首先获取了ListView用以填充联系人数据,然后设置了适配器,但是此时适配器中的数据是空的,直到后面才会加载数据更新uI。
在方法执行完之后,在uI可见之前回调执行的方法。
- 进入的方法:
这个类持有一个对象,用来存储数据。
持有的,类代表了当前需要加载的,可以理解为一个联系人集合,比如说本地联系人、Google联系人……这里我们假设只加载本地联系人数据,所以partitionCount=1。
从这里我们可以做出猜测:
联系人数据不是想象中的分页(每次N条联系人数据)加载,也不是说一次性全部加载,而是一个账户一个账户加载联系人数据,加载完毕一个账户就在uI刷新并显示数据。
- 进入的方法:
这个方法是实现类的方法,参照文档解释:
这个方法会新建/重启一个当前LoaderManager中的Loader,将回调方法注册给他,并开始加载数据。也就是说会回调LoaderManager的onCreateLoader()方法。
Starts a new or restarts an existing android.content.Loader in this manager, registers the callbacks to it, and (if the activity/fragment is currently started) starts loading it
进入LoadManager接口的实现类:LoaderManagerImpl 的restartLoader方法内部:
- 进入的方法,位于的祖父类中:
直接返回了的数据加载器:
这就是的实现类(数据加载器)。
- 然后再看一下类是如何加载数据的呢
发现它继承自,而又继承自
在关键的方法中:
异步调用了的方法:
的这些参数那里指定的呢
方法在类中实现,实现了对参数的配置:
可以看到,配置了主要的几个参数:,,,。
这些参数用于最后和交互的方法方法中……
- 最终查询的是:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!