代码版本: Contact code version: 4.4.2
一 打开Log开关:
如
if (Log.isLoggable(Constants.PERFORMANCE_TAG, Log.DEBUG)) {
Log.d(Constants.PERFORMANCE_TAG, "PeopleActivity.onCreate start");
}
打开: adb shell setprop log.tag.ContactsPerf VERBOSE
该属性值取值顺序为【V,D,I,W,E,A,S】 A表示最高级别的日志,即assert;S表示Suppress,即停止该日志的输出。
次设置重启后实效,也可以将该属性添加在data/local.prop属性文件中,不同的是,只要存在local.prop,该手机重启与否都一样,可以打印VERBOSE
二 Contact代码结构
主要由Contacts, ContactsCommon, ContactsProvider三个工程组成
1. Conctacts: UI, 用户交互逻辑
文件目录
packages/apps/Contacts
2. ContactsCommon: 实现了基类, 工具类和一些数据结构供Contacts使用
文件目录
packages/apps/ContactsCommon
3. ContactsProvider: 联系人数据增删改
文件目录
packages/providers/ContactsProvider
三 数据库结构:
device中存放位置
/data/data/com.android.providers.contacts/databases
contacts2.db : 所有联系人信息
profile.db : 个人信息
1. contacts2.db 中几个重要的表, 跟profile db中表结构差不多
可以添加几个联系人然后把db文件下载下来用SQLiteSpy查看
1) accounts
用于同步contact的账号相关信息
2) contacts
联系人表, 每个联系人对应一行, 只存放一些标志性信息如raw contact id, starred, timestamp等, 具体联系人信息存放在raw_contact和data表中。
不可以直接向此表中插入数据, 用户插入操作通常更改raw_contact表, 然后系统自动merge信息到contact表
3) data
详细信息存放在这个表里, 如联系人姓名, 号码, 地址, 邮箱, 组织等,
信息的类别用mimetype_id来指明, 通过引用raw_contact_id关联到raw_contacts
4) raw_contacts
比contact表更多的信息,很多标志信息, 主要的数据增删改是操作这个表。
与contact表不同的是, 一个联系人(contact_id) 可以对应多行数据, 比如这个联系人存放在多个账户上(account_id)
5) mimetype
索引信息类别, 用于data表
2. 主要视图
1)view_contacts
2) view_data
3) view_raw_contacts
4)view_entities
参考文章
Android 5.0 Contacts源码分析 http://blog.csdn.net/lsmfeixiang/article/details/44856569