筆記:IPC機(jī)制

IPC機(jī)制


  • IPC簡(jiǎn)介
    Inter-Process Communication 進(jìn)程間通信/跨進(jìn)程通信----指兩個(gè)進(jìn)程間進(jìn)行數(shù)據(jù)交換的過(guò)程莱坎。
    Android中進(jìn)程間通信的方式是通過(guò)Binder方式

  • Android開(kāi)啟多進(jìn)程方式
  1. 給四大組件在AndroidManifest中指定android:process屬性
  2. 通過(guò)JNI在native層fork一個(gè)新的進(jìn)程(不常用)

  • 進(jìn)程名以:開(kāi)頭的進(jìn)程屬于當(dāng)前應(yīng)用的私有進(jìn)程,其他應(yīng)用的組件不可以和它跑在同一個(gè)進(jìn)程中探橱,
  • 進(jìn)程名不以:開(kāi)頭的進(jìn)程屬于全局進(jìn)程瘫想,其他應(yīng)用通過(guò)ShareUID的方式可以和它跑在同一個(gè)進(jìn)程中,需要兩個(gè)應(yīng)用有相同的ShareUID和簽名,這樣他們就可以互相訪(fǎng)問(wèn)私有數(shù)據(jù)翔脱。

  • 多進(jìn)程的問(wèn)題
    一個(gè)靜態(tài)變量瘩扼,在不同進(jìn)程中修改它的值谆甜,不會(huì)同步到其他進(jìn)程中垃僚,每個(gè)進(jìn)程只會(huì)持有該靜態(tài)變量的副本集绰。

Android為每個(gè)應(yīng)用分配一個(gè)獨(dú)立的虛擬機(jī),或者說(shuō)每個(gè)進(jìn)程分配一個(gè)獨(dú)立的虛擬機(jī)谆棺,不同的虛擬機(jī)在內(nèi)存地址分配上有獨(dú)立的地址空間栽燕,這就會(huì)使在不同的虛擬機(jī)中訪(fǎng)問(wèn)同一個(gè)對(duì)象會(huì)產(chǎn)生多個(gè)副本

多進(jìn)程會(huì)帶來(lái)的問(wèn)題

  • 實(shí)現(xiàn)跨進(jìn)程通信的方式舉例:
    Intent傳輸數(shù)據(jù),共享文件和sharedpreference,基于Binder的Messenger,AIDL和Socket

  • 序列化Serializable中有個(gè)SerialVersionUID改淑,作用:該id被序列化到文件中碍岔,當(dāng)反序列化時(shí),會(huì)取出該id與當(dāng)前類(lèi)的id比較朵夏,如果不一樣蔼啦,表示類(lèi)中的屬性發(fā)生了變化,一般是編譯器自己通過(guò)hash計(jì)算生成仰猖,如果手動(dòng)指定捏肢,則修改類(lèi)不會(huì)報(bào)錯(cuò)。
  1. 靜態(tài)成員變量屬于類(lèi)饥侵,不屬于變量鸵赫,不會(huì)參與序列化
  2. 用transient標(biāo)記的變量不參與序列化過(guò)程

  • Parcelable接口
    一個(gè)類(lèi)只要實(shí)現(xiàn)該接口,就可以實(shí)現(xiàn)序列化并通過(guò)Intent和binder傳遞
Parcelable

  • List Map也可以序列化躏升,前提是內(nèi)部元素可序列化

  • Parcelable主要用在內(nèi)存序列化上

  • AIDL自動(dòng)生成的java文件 p48

  • Binder的工作機(jī)制p50


    Binder的工作機(jī)制

  • 通過(guò)給Binder設(shè)置死亡代理辩棒,linkToDeath和unLinkToDeath p60

  • AIDL生成java-UML類(lèi)圖
    AIDL生成java-UML類(lèi)圖

  • Messenger,基于AIDL實(shí)現(xiàn)膨疏,使用p66

  • AIDL 支持的數(shù)據(jù)類(lèi)型:
  1. 基本數(shù)據(jù)類(lèi)型(int boolean long char double等)
  2. String 和 CharSequence
  3. List 只支持ArrayList,里面每個(gè)元素都必須被AIDL支持
  4. Map 只支持HashMap,里面每個(gè)元素都必須被AIDL支持一睁,包括key和value,
  5. Parcelable :所有實(shí)現(xiàn)了Parcelable接口的對(duì)象
  6. AIDL所有的AIDL接口本身也可以在AIDL文件中使用

AIDL中除了基本數(shù)據(jù)類(lèi)型外,其他數(shù)據(jù)類(lèi)型必須都標(biāo)上方向:in,out或inout,in表示輸入型參數(shù)佃却,out表示輸出型者吁,inout 表示輸入輸出型


  • RemoteCallBackList 系統(tǒng)專(zhuān)門(mén)提供用于刪除跨進(jìn)程listener接口的。
    底層是一個(gè)Map key為binder類(lèi)型双霍,value為listener接口類(lèi)型砚偶,原理就是listener所對(duì)應(yīng)的binder是唯一的。

  • SQLiteDatabase內(nèi)部對(duì)數(shù)據(jù)庫(kù)操作是有同步處理的洒闸。但如果有多個(gè)SQLiteDatabase,則無(wú)法保證線(xiàn)程間的同步

  • Binder 連接池 (p117)

大致是有多個(gè)業(yè)務(wù)Binder染坯,然后創(chuàng)建一個(gè)Binder管理的AIDL文件,用于根據(jù)類(lèi)型返回不同業(yè)務(wù)binder丘逸,然后服務(wù)端Service 只與管理Binder打交道单鹿,接收管理Binder返回的Binder,客戶(hù)端則根據(jù)管理Binder查詢(xún)自己需要的Binder再調(diào)用業(yè)務(wù)邏輯即可深纲,這樣就實(shí)現(xiàn)了簡(jiǎn)單的Binder連接池仲锄。


  • 各種AIDL實(shí)現(xiàn)的優(yōu)缺點(diǎn)及使用場(chǎng)景


    各種AIDL實(shí)現(xiàn)的優(yōu)缺點(diǎn)及使用場(chǎng)景
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末劲妙,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子儒喊,更是在濱河造成了極大的恐慌镣奋,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怀愧,死亡現(xiàn)場(chǎng)離奇詭異侨颈,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)芯义,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)哈垢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人扛拨,你說(shuō)我怎么就攤上這事耘分。” “怎么了绑警?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵求泰,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我待秃,道長(zhǎng)拜秧,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任章郁,我火速辦了婚禮枉氮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘暖庄。我一直安慰自己聊替,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布培廓。 她就那樣靜靜地躺著惹悄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肩钠。 梳的紋絲不亂的頭發(fā)上泣港,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音价匠,去河邊找鬼当纱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛踩窖,可吹牛的內(nèi)容都是我干的坡氯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼箫柳!你這毒婦竟也來(lái)了手形?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤悯恍,失蹤者是張志新(化名)和其女友劉穎库糠,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體坪稽,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡曼玩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年鳞骤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了窒百。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡豫尽,死狀恐怖篙梢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情美旧,我是刑警寧澤渤滞,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站榴嗅,受9級(jí)特大地震影響妄呕,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嗽测,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一绪励、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧唠粥,春花似錦疏魏、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至官份,卻和暖如春只厘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舅巷。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工羔味, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悄谐。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓介评,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子们陆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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