Android Mms之:聯(lián)系人管理的應(yīng)用分析
Contact聯(lián)系人對(duì)Mms來(lái)說(shuō)是十分重要的,因?yàn)槊恳粋€(gè)對(duì)話的收信人都是一個(gè)聯(lián)系人,新建信息時(shí)可以輸入聯(lián)系人的任何信息,比如號(hào)碼或名字,Mms都可以把信息發(fā)給相應(yīng)的人。Mms中的類Contact就是用來(lái)代表一個(gè)聯(lián)系人,它含有聯(lián)系人的信息,如名字,號(hào)碼,聯(lián)系人Id,是否存在于聯(lián)系人數(shù)據(jù)庫(kù)等等,同時(shí)Contact也提供了一些方法來(lái)獲取Contact對(duì)象,Contact.get()方法來(lái)獲取Contact對(duì)象。Contact會(huì)保持?jǐn)?shù)據(jù)與聯(lián)系人數(shù)據(jù)庫(kù)的同步,有一個(gè)接口updateContact()用于通知聯(lián)系人信息已經(jīng)發(fā)生了改變。
Contact內(nèi)部也有一個(gè)Cache,用于保存最近用到的聯(lián)系人。因?yàn)橥獠吭谟肅ontact.get()方法來(lái)獲取Contact時(shí)通常都只傳給一個(gè)號(hào)碼,并期望獲取Contact。
Contact內(nèi)部的Cache是由ContactCache類來(lái)創(chuàng)建和管理的。它內(nèi)部還有一個(gè)TaskStack用于管理一些Runnable。因?yàn)槊總€(gè)從數(shù)據(jù)庫(kù)中加載Contact都是一個(gè)單獨(dú)的線程,這個(gè)TaskStack就是專門用于管理Runnable和,以Stack的方式來(lái)管理,也即FILO順序的方式來(lái)運(yùn)行Runnable任務(wù)。
ContactCache中有很多重載的get()方法用于獲取Contact對(duì)象,其中都有一個(gè)布爾參數(shù)canBlock,這個(gè)是說(shuō)是以阻塞調(diào)用者的方式來(lái)加載Contact還是以異步的方式來(lái)加載,另外一個(gè)參數(shù)就是聯(lián)系人的號(hào)碼。get()方法會(huì)先調(diào)用internalGet()方法,internalGet()會(huì)先試圖從內(nèi)部的CachemContactHash中獲取Contact,如果不存在就用傳入的號(hào)碼新建一個(gè)Contact,總之它一定會(huì)返回一個(gè)聯(lián)系人的。之后會(huì)進(jìn)行updateContact()的動(dòng)作,updateContact()就是放在一個(gè)Runnable線程中,如果調(diào)用者是可阻塞的,馬上就運(yùn)行這個(gè)Runnable來(lái)updateContact,如果是異步方式就把這個(gè)Runnable放到TaskStack中稍后運(yùn)行。UpdateContact會(huì)調(diào)用getContactInfo來(lái)獲取聯(lián)系人的信息,getContactInfo會(huì)調(diào)用getContactInfoForSelf(),getContactInfoForPhoneNumber,getContactInfoForEmailAddress()來(lái)獲取具體的聯(lián)系人信息。其中如果這個(gè)號(hào)碼是手機(jī)聯(lián)系人自己本身,就獲取本機(jī)的相關(guān)信息;如果號(hào)碼是一個(gè)Email地址或者一個(gè)短號(hào)碼,或者字符號(hào)碼,那么就把號(hào)碼作為一個(gè)Email地址來(lái)查詢,也就是說(shuō)把它作為聯(lián)系人的Email字段匹配來(lái)查詢;其他情況,也就是號(hào)碼就是一個(gè)電話號(hào)碼,把它與聯(lián)系人的電話號(hào)碼字段匹配查詢。updateContact在查詢完成后,會(huì)調(diào)用接口UpdateListener.onUpdate(),以告訴監(jiān)聽(tīng)者,聯(lián)系人已更新。因?yàn)槁?lián)系人的獲取過(guò)程中都是異步的,所以才會(huì)在更新完成后調(diào)用接口來(lái)通知。
內(nèi)部的Cache的數(shù)據(jù)結(jié)構(gòu)是一個(gè)HashMap<String,ArrayList<Contact>>,Key是以Contact內(nèi)部的數(shù)據(jù)來(lái)生成的。InvalidateCache時(shí)并不會(huì)移除mContactsHash內(nèi)部的數(shù)據(jù),而是把其標(biāo)識(shí)為Stale,當(dāng)下次Get這個(gè)Contact時(shí)就會(huì)調(diào)用updateContact()來(lái)更新這個(gè)Contact。
- Android編程之非調(diào)用系統(tǒng)界面實(shí)現(xiàn)發(fā)送彩信的方法(MMS)
- Android開(kāi)發(fā)中使用mms模塊收發(fā)單卡和雙卡短信的教程
- Android Mms之:短信發(fā)送流程(圖文詳解)
- Android Mms之:接收信息流程(圖文詳解)
- Android Mms之:草稿管理的應(yīng)用
- Android Mms之:深入MMS支持
- Android Mms之:深入理解對(duì)話列表管理
- Android Mms之:對(duì)話與聯(lián)系人關(guān)聯(lián)的總結(jié)詳解
- Android Mms之:深入理解Compose
- Android Mms之:PDU的使用詳解
- 簡(jiǎn)單掌握Android開(kāi)發(fā)中彩信的發(fā)送接收及其附件的處理
相關(guān)文章
Android實(shí)現(xiàn)圖片異步加載并緩存到本地
這篇文章主要介紹了Android實(shí)現(xiàn)圖片異步加載并緩存到本地的相關(guān)資料,需要的朋友可以參考下2016-02-02Android實(shí)現(xiàn)檢測(cè)實(shí)體按鍵事件并屏蔽
這篇文章主要介紹了Android實(shí)現(xiàn)檢測(cè)實(shí)體按鍵事件并屏蔽 ,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08Android的Launcher啟動(dòng)器中添加快捷方式及小部件實(shí)例
這篇文章主要介紹了在Android的Launcher啟動(dòng)器中添加快捷方式及窗口小部件的方法,包括在自己的應(yīng)用程序中添加窗口小部件AppWidget的例子,需要的朋友可以參考下2016-02-02Android使用SoundPool實(shí)現(xiàn)播放音頻
這篇文章主要為大家詳細(xì)介紹了Android使用SoundPool實(shí)現(xiàn)播放音頻,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05Android開(kāi)發(fā)準(zhǔn)確獲取手機(jī)IP地址的兩種方式
這篇文章主要介紹了Android開(kāi)發(fā)準(zhǔn)確獲取手機(jī)IP地址的兩種方式,需要的朋友可以參考下2020-03-03android設(shè)備間實(shí)現(xiàn)無(wú)線投屏的示例代碼
Android提供了MediaProjection來(lái)實(shí)現(xiàn)錄屏,通過(guò)MediaProjection可以獲取當(dāng)前屏幕的視頻流,而視頻流需要通過(guò)編解碼來(lái)壓縮進(jìn)行傳輸,通過(guò)MediaCodec可實(shí)現(xiàn)視頻的編碼和解碼,這篇文章主要介紹了android設(shè)備間實(shí)現(xiàn)無(wú)線投屏,需要的朋友可以參考下2022-06-06關(guān)于androidstuio導(dǎo)入系統(tǒng)源碼的問(wèn)題
小編最近在做系統(tǒng)源碼導(dǎo)出來(lái)的小項(xiàng)目,在導(dǎo)入androidstudio過(guò)程中遇到過(guò)一些問(wèn)題,本文以Schedule power on off為例給大家詳細(xì)介紹,需要的朋友參考下吧2021-06-06Flutter加載圖片流程之ImageCache源碼示例解析
這篇文章主要為大家介紹了Flutter加載圖片流程之ImageCache源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Android中二維碼的掃描和生成(使用zxing庫(kù))
ZXing是一個(gè)開(kāi)放源碼的,用Java實(shí)現(xiàn)的多種格式的1D/2D條碼圖像處理庫(kù),它包含了聯(lián)系到其他語(yǔ)言的端口,下面這篇文章主要給大家介紹了關(guān)于Android中二維碼掃描和生成的相關(guān)資料,主要使用的zxing庫(kù),需要的朋友可以參考下2022-09-09