經(jīng)典實(shí)現(xiàn)
1、文件共享
兩個(gè)進(jìn)程約定磁盤(pán)空間上的某個(gè)文件為信息交互的媒介,這種情況要注意不同進(jìn)程間訪問(wèn)共享文件的同步問(wèn)題
2、操作系統(tǒng)提供的公共信息機(jī)制
比如Windows系統(tǒng)提供的注冊(cè)表
3、共享內(nèi)存
共享內(nèi)存是一種常用的進(jìn)程間通訊機(jī)制。兩個(gè)進(jìn)程可以直接共享訪問(wèn)同一塊內(nèi)存區(qū)域,減少了數(shù)據(jù)的復(fù)制操作,因而速度上優(yōu)勢(shì)比較明顯。操作步驟如下:
- a、創(chuàng)建內(nèi)存共享區(qū)
- b、映射內(nèi)存共享區(qū)
- c、訪問(wèn)內(nèi)存共享區(qū)
- d、進(jìn)程間通訊
- e、撤銷(xiāo)內(nèi)存映射區(qū)
-
f、刪除共享區(qū)
共享內(nèi)存機(jī)制
4、管道(Pipe)
管道也是操作系統(tǒng)中常見(jiàn)的一種進(jìn)程間通訊方式,它適用于所有POSIX系統(tǒng)及Windows系列產(chǎn)品。Pipe通過(guò)方式如下:
- 進(jìn)程雙方分立管道的兩邊,進(jìn)行數(shù)據(jù)的傳輸通訊
- 管道是單向的
- 一根管道同時(shí)具備“讀取”和“寫(xiě)入”
- 管道有容量限制
5、RPC(Remote Procedure Calls)
RPC涉及的通訊通常運(yùn)行與兩臺(tái)不同的機(jī)器中,一般完整的RPC通訊包含如下步驟:
- 客戶端進(jìn)程調(diào)用stub接口:
- Stub根據(jù)操作系統(tǒng)的要求進(jìn)行打包,并執(zhí)行相應(yīng)的系統(tǒng)調(diào)用
- 有內(nèi)核來(lái)完成與服務(wù)器端的具體交互,它負(fù)責(zé)將客戶端的數(shù)據(jù)包發(fā)給服務(wù)器端的內(nèi)核
- 服務(wù)器端Stub解包并調(diào)用與數(shù)據(jù)包匹配的進(jìn)程
- 進(jìn)程執(zhí)行操作
- 服務(wù)器你以上步驟的逆向過(guò)程將結(jié)果返回給客戶端
Android進(jìn)程間通訊
Android是基于Linux系統(tǒng)實(shí)現(xiàn),自然支持Linux系統(tǒng)的進(jìn)程間通訊,如文件共享、共享內(nèi)存等方式,同時(shí)也封裝了自身的特色方式,如:
- Bundle
適用于四大組件間的進(jìn)程通訊,只支持特定數(shù)據(jù)傳輸,如基本數(shù)據(jù)類(lèi)型,可序列化的引用數(shù)據(jù) - 文件共享
簡(jiǎn)單易用,不適合高并發(fā)的場(chǎng)景 - AIDL
系統(tǒng)封裝的基于Binder的進(jìn)程間通訊 - Messenger
低并發(fā)的一對(duì)多實(shí)時(shí)通信,無(wú)RPC需求,或者無(wú)需要返回結(jié)果的RPC需求 - ContentProvider
一對(duì)多的進(jìn)程間數(shù)據(jù)共享 - BroadcastReceiver
操作簡(jiǎn)單,對(duì)持一對(duì)多實(shí)時(shí)通信 - Socket
功能強(qiáng)大,可通過(guò)網(wǎng)絡(luò)傳輸字節(jié)流,支持一對(duì)多實(shí)時(shí)并發(fā)通信
參考資料
- 深入理解Android內(nèi)核設(shè)計(jì)思想. 林學(xué)森。
