IPC全稱 Inter-process communication 進(jìn)程間通信
開始學(xué)習(xí)之前我們先了解一個(gè)名詞“尋址“,不管你們?cè)趺纯捶凑乙宦犚娺@個(gè)詞就覺得很牛逼,有木有?(因?yàn)椴欢剑。ぶ罚櫭剂x就是尋找地址勤哗,在計(jì)算機(jī)中常用的有寄存器尋址、指令尋址等等(這一發(fā)散我估計(jì)就收不回來(lái)了)掩驱。還是舉個(gè)例子吧芒划,小伙伴們出去搞事情,是不是都得先約個(gè)地點(diǎn)呀昙篙?老去同一個(gè)地方浪腊状,肯定沒意思,就決定去一個(gè)沒去的地方苔可;那么問(wèn)題來(lái)了缴挖,我們?cè)撛趺催^(guò)去呢?對(duì)于科技發(fā)達(dá)的今天焚辅,這個(gè)問(wèn)題已經(jīng)很好解決了映屋;小吳說(shuō),我直接打車過(guò)去司機(jī)肯定知道(指令尋址有木有同蜻?)棚点;小寶說(shuō),我用百度地圖導(dǎo)航過(guò)去(寄存器尋址有木有湾蔓?)瘫析;三濤說(shuō),我直接走過(guò)去(這就厲害了默责,直接尋址的有木有贬循?)。千言萬(wàn)語(yǔ)匯成一句話桃序,尋址就是尋找地址杖虾,你可以有很多種方式去做這件事,但是最終的目的就是找到地址罷了媒熊。(這個(gè)詞就是這么個(gè)理解奇适,有木有很簡(jiǎn)單坟比?)
看到這里有小伙伴就是有意見了,我們是來(lái)學(xué)習(xí)IPC的嚷往,你講這么多尋址干嘛呢葛账?你要先尋址找到對(duì)方,才能通信嘛皮仁!來(lái)來(lái)來(lái)注竿,我們這就開始:進(jìn)程間通信,顧名思義就是進(jìn)程之間通信嘛魂贬,我們先撇開進(jìn)程不看,主要是通信裙顽;通信是什么呢付燥?反正我的理解就是兩人聊聊天咯,但是兩個(gè)人要好好的聊天是有很多前置條件的:
1愈犹、確定通信方式(比如:微信聊键科、QQ聊或者短信聊等)
2、確定聯(lián)系地址漩怎,建立連接(用微信的得加個(gè)微信號(hào)勋颖,用QQ的得加個(gè)QQ號(hào)等)
3、統(tǒng)一通信語(yǔ)言(我只會(huì)中文勋锤,你卻要跟我講英文饭玲,這個(gè)肯定交流不好;不過(guò)現(xiàn)在有翻譯啦叁执,你帶個(gè)翻譯也一樣可以正常交流的)
往下講之前先插播一個(gè)名詞AIDL
AIDL全稱是Android Interface Definition Language茄厘,也就是Android接口定義語(yǔ)言。與您可能使用過(guò)的其他IDL 類似谈宛, 您可以利用它定義客戶端與服務(wù)使用進(jìn)程間通信(IPC) 進(jìn)行相互通信時(shí)都認(rèn)可的編程接口次哈。
為什么要解釋這個(gè)名詞呢?因?yàn)樵贏ndroid進(jìn)程間通信主要就是依靠AIDL吆录。但是久而久之窑滞,當(dāng)有人提及什么是IPC的時(shí)候,大家張口就回答AIDL恢筝,對(duì)于這個(gè)現(xiàn)象我要表達(dá)的意思是你沒有弄懂IPC,你只是簡(jiǎn)單知道了Android中怎么實(shí)現(xiàn)IPC的而已哀卫。
先宏觀看一下Android IPC的架構(gòu)圖(這是宏觀圖,不包含細(xì)節(jié)滋恬,不要問(wèn)我為什么沒有看見IBinder)
如上圖所示聊训,進(jìn)程1和進(jìn)程2的通信并不是直接的,它們之間經(jīng)過(guò)了驅(qū)動(dòng)層中轉(zhuǎn)恢氯。我們來(lái)分析一下带斑,這幅圖里究竟做了什么事情:
1鼓寺、進(jìn)程1向驅(qū)動(dòng)發(fā)起和進(jìn)程2通信的請(qǐng)求
2、驅(qū)動(dòng)經(jīng)過(guò)尋址找到進(jìn)程2勋磕,并通知進(jìn)程1的請(qǐng)求
3妈候、進(jìn)程2接受請(qǐng)求,并通知驅(qū)動(dòng)回復(fù)進(jìn)程1
4挂滓、驅(qū)動(dòng)講進(jìn)程2回復(fù)通知給進(jìn)程1苦银,建立通信關(guān)系
來(lái)來(lái),回到我們一開始講的通信赶站。
1幔虏、確定通信方式AIDL
2、通過(guò)驅(qū)動(dòng)尋址贝椿,建立連接
3想括、我們使用的Java語(yǔ)言聊天(谷歌給我們請(qǐng)了翻譯JNI)
第一講就這么多,想要學(xué)習(xí)一個(gè)東西烙博,先宏觀的了解它瑟蜈,再去細(xì)致的學(xué)習(xí)它,這樣才能事半功倍渣窜。