標籤:
代碼版本: 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
Contacts源碼分析(一、概述)