Android通信v2.0

跨網(wǎng)絡(luò)通信

  • Socket
    本地通信,進(jìn)程從zygote進(jìn)程fork的指令都是用socket本地通信的

跨應(yīng)用/進(jìn)程通信

不考慮上面用跨網(wǎng)絡(luò)通信方式來(lái)解決 跨應(yīng)用/進(jìn)程通信

  • 文件
    基于Linux的文件解決了并發(fā)讀/寫的問(wèn)題悼沈。所以可以基于文件通信屈溉,避免并發(fā)寫的問(wèn)題
  • IBinder
  • Bundle/Intent
    Intent跨進(jìn)程通信塞关,Bundle攜帶數(shù)據(jù)ArrayMap
    場(chǎng)景:四大組件傳遞消息
  • AIDL
    客戶端:
    aidl接口動(dòng)態(tài)生成IxxManager(遠(yuǎn)程代理類)
    代理類實(shí)現(xiàn)接口方法 調(diào)用構(gòu)造參數(shù)IBinder的transact()傳輸對(duì)應(yīng)的方法參數(shù)阻塞調(diào)用
    asBinder()得到這個(gè)代理類的實(shí)例供客戶端使用
    服務(wù)端:
    aidl接口動(dòng)態(tài)生成IxxManager
    創(chuàng)建IxxManager的stub匿名Binder實(shí)現(xiàn)接口方法的實(shí)際調(diào)用代理
    將binder通過(guò)onBind返回
    場(chǎng)景:高并發(fā),遠(yuǎn)程方法調(diào)用
  • Messager
    messager對(duì)Handler進(jìn)行了封裝
    服務(wù)端Handler處理發(fā)送的消息
    Messager通過(guò)OnBind()方法轉(zhuǎn)成IBinder給客戶端
    客戶端通過(guò)Messager.send()發(fā)送消息給服務(wù)端
    服務(wù)端通過(guò)Handler.handleMessage處理message對(duì)象语婴,可從msg.replyTo的獲取客戶端的Messager,向客戶端發(fā)送消息
    場(chǎng)景:低并發(fā)描孟,互相傳遞消息
  • Binder池
    多個(gè)Binder(線程)在單個(gè)service上執(zhí)行(一個(gè)service完成多個(gè)AIDL接口工作)
  • ContentProvider
    提供不同應(yīng)用之間數(shù)據(jù)共享的方式,定義authorities為處理URI的路徑砰左。提供對(duì)本地?cái)?shù)據(jù)庫(kù)表的CRUD操作匿醒。
  • Broadcast
    全局廣播監(jiān)聽(tīng),廣播監(jiān)聽(tīng)action動(dòng)作處理主線程缠导,發(fā)送action廣播

跨進(jìn)程傳輸對(duì)象序列化和反序列化

  • Serializable
    標(biāo)記接口廉羔,無(wú)需實(shí)現(xiàn),系統(tǒng)調(diào)用ObjectInputStream/ObjectOutStream等自動(dòng)序列化和反序列化所有屬性(除trainsient關(guān)鍵字標(biāo)記屬性外)
  • Pracelable
    需要實(shí)現(xiàn)類實(shí)現(xiàn)具體需要哪些序列化和反序列化的屬性

跨組件/線程通信

不考慮上面用跨網(wǎng)絡(luò)通信方式和跨應(yīng)用/進(jìn)程通信方式解決跨組件通信

跨組件通信

  • Handler
    單線程模型僻造。(threadLocal+looper+handler)
    耦合的主線程通信(發(fā)送者和處理者高度耦合)
  • LocalBroadcastManager
    發(fā)送的私有數(shù)據(jù)不同擔(dān)心會(huì)被公開(kāi)憋他、沒(méi)有第三方應(yīng)用發(fā)送數(shù)據(jù)給你,不用擔(dān)心別人利用你的漏洞髓削、比全局廣播傳遞數(shù)據(jù)更高效竹挡。
    handler分發(fā)在主線程處理廣播消息+根據(jù)Intent-filter的actions分發(fā)注冊(cè)監(jiān)聽(tīng)action的廣播接手者
    解耦的主線程通信(handler的高級(jí)擴(kuò)展)
  • RxBus
    單線程通信(僅僅支持組件通信)
  • Otto
    解耦主線程通信(注解訂閱)
  • EventBus
    當(dāng)前線程消息隊(duì)列串行消息+根據(jù)消息class找到訂閱消息的處理者,然后分發(fā)線程調(diào)用處理對(duì)象處理
    實(shí)現(xiàn)相當(dāng)于LocalBroadcastMangaer升級(jí)版立膛,注解和(反射/注解處理器)訂閱揪罕,切換線程處理消息梯码。
    解耦的線程通信組件

組件內(nèi)異步任務(wù)

  • Thread+Handler
    實(shí)現(xiàn)異步任務(wù)+主線程通信
    場(chǎng)景:少量的短耗時(shí)任務(wù)
  • AsyncTask
    實(shí)現(xiàn)異步任務(wù),可以支持更新UI和進(jìn)度好啰。(ExcutorService+Handler)
    異步任務(wù)執(zhí)行+主線程通信組件
    場(chǎng)景:少量短耗時(shí)任務(wù)轩娶,如網(wǎng)絡(luò)請(qǐng)求、數(shù)據(jù)庫(kù)等
  • LoaderManager
    異步數(shù)據(jù)加載框往、數(shù)據(jù)源監(jiān)聽(tīng)變化鳄抒、橫豎屏切換數(shù)據(jù)保留
    contentProvider讀取數(shù)據(jù)IO操作異步任務(wù)+主線程通信
    場(chǎng)景:數(shù)據(jù)庫(kù)讀取短耗時(shí)任務(wù)
  • RxJava
    通信角度:異步任務(wù)+線程通信
    場(chǎng)景:文件處理、數(shù)據(jù)庫(kù)椰弊、網(wǎng)絡(luò)請(qǐng)求短耗時(shí)任務(wù)
  • IntentSerivce
    處理異步任務(wù)的Service许溅。(Looper+Thread+Handler)
    脫離組件運(yùn)行的異步任務(wù)
    場(chǎng)景:?jiǎn)未蜗螺d任務(wù)這些長(zhǎng)耗時(shí)任務(wù)
  • Service+process
    脫離組件運(yùn)行的后臺(tái)任務(wù)
    場(chǎng)景:多次下載、多媒體后臺(tái)播放男应、推送服務(wù)等長(zhǎng)耗時(shí)任務(wù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末闹司,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子沐飘,更是在濱河造成了極大的恐慌游桩,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,590評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耐朴,死亡現(xiàn)場(chǎng)離奇詭異借卧,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)筛峭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門铐刘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人影晓,你說(shuō)我怎么就攤上這事镰吵。” “怎么了挂签?”我有些...
    開(kāi)封第一講書人閱讀 169,301評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵疤祭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我饵婆,道長(zhǎng)勺馆,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 60,078評(píng)論 1 300
  • 正文 為了忘掉前任侨核,我火速辦了婚禮草穆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搓译。我一直安慰自己悲柱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布些己。 她就那樣靜靜地躺著诗祸,像睡著了一般跑芳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上直颅,一...
    開(kāi)封第一講書人閱讀 52,682評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音怀樟,去河邊找鬼功偿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛往堡,可吹牛的內(nèi)容都是我干的械荷。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼虑灰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吨瞎!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起穆咐,我...
    開(kāi)封第一講書人閱讀 40,098評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤颤诀,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后对湃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體崖叫,經(jīng)...
    沈念sama閱讀 46,638評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評(píng)論 3 342
  • 正文 我和宋清朗相戀三年拍柒,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了心傀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,852評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拆讯,死狀恐怖脂男,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情种呐,我是刑警寧澤宰翅,帶...
    沈念sama閱讀 36,520評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站陕贮,受9級(jí)特大地震影響堕油,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜肮之,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評(píng)論 3 335
  • 文/蒙蒙 一掉缺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧戈擒,春花似錦眶明、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,674評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)丑瞧。三九已至,卻和暖如春蜀肘,著一層夾襖步出監(jiān)牢的瞬間绊汹,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,788評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工扮宠, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留西乖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,279評(píng)論 3 379
  • 正文 我出身青樓坛增,卻偏偏與公主長(zhǎng)得像获雕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子收捣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容