AndroidContacts 源碼分析

前言:最近一段時間在研究Android Contact源碼,看了一段時間之後覺得如果不做任何準備直接去看源代碼當然會一頭霧水,容易迷失方向。後來查看閱讀源碼相關文章感覺這個帖子上的大牛心得講得不錯挺周到,這是地址https://www.zhihu.com/question/19759722。後來發現羅昇陽老師也對Android源碼進行過系統的分析,出了本書叫《Android系統源碼情景分析》。在此我準備記錄一下對AndroidContact的認知,整理一下思路,也是領導要求,哈哈。有不準確的地方望同學們多多指教,大家共同學習。
一、包結構分析
1、Contacts相關
相關聯的的projects

聯繫人分爲了Contacts和ContactsCommon,數據庫是在ContactsProvider。
2、Contacts的包結構

3、ContactsCommon的包結構


二、功能分析

1、數據庫分析
系統聯繫人數據庫存放在如下位置data\data\com.Android.providers.contacts\data bases\,正常的聯繫人都保存在contacts2.db中,個人信息保存在profile.db,但是兩個數據庫的基本結構都是一樣的
表結構

account是和賬號有關

data表中存放的是聯繫人具體信息,每行存儲一位聯繫人的某一類信息(如電話,姓名,郵箱、社交賬號、地址等)

2、聯繫人中的數據操作流程
對於聯繫人的創建、更新、刪除一般情況下都封裝在ContactSaveService類中,如圖

ContactSaveService類繼承自IntentService,是一個用於異步操作聯繫人數據的service,在完成數據操作之後,通過Intent(Intent中包含需要回調的Activity和action)回調到Activity中來通知UI更新。
以CreateContact(創建聯繫人)爲例:
ContactEditorFragment.doSaveAction()方法中

ContactSaveService中createSaveContactIntent(),傳遞了回調需要的參數

ContactSaveService中saveContact()中


3、主界面
主界面爲PeopleActivity界面,分爲兩個tab,分別爲DefaultContactBrowseListFragment和ContactTileListFragment,通過viewpager進行切換
其中DefaultContactBrowseListFragment爲聯繫人列表頁面,主要用來處理聯繫人列表的加載展示和聯繫人搜索,數據加載流程上面已經說明了,列表itemview爲ContactListItemView
ContactTileListFragment爲收藏聯繫人及常用聯繫人,該類直接繼承自Fragment,但是和之前說的流程基本一致,方式略微不同,數據分爲收藏聯繫人和最近常聯繫的聯繫人,通過ContactTileLoaderFactory來提供加載不同數據的cursorloader

4Detail 界面
Android6.0的code中,detail包中沒有了之前的聯繫人詳情,只留下了一些輔助工具類,轉而使用QuickContactActivity來代替ContactDetailActivity,界面是可滑動的,最外層是自定義view:com.android.contacts.widget.MultiShrinkScroller,如果最近和該聯繫人聯繫過,那麼在聯繫人號碼下面緊接着就會列出最近聯繫情況,包括通話和短信。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章