關(guān)鍵詞:ipC 方式 / 共享文件 / ContentPRovider / Messenger / Intent + extras / Socket / Bundle
本次筆記梳理了所有可以進(jìn)行跨進(jìn)程通信的常見(jiàn)方式,包括使用 Bundle、使用文件共享、使用 Messenger、使用 AIDL、使用 ContentProvider、使用 Socket。

[ 還有幾點(diǎn)需要知道 ]
對(duì)象是不能跨進(jìn)程直接傳輸?shù)模瑢?duì)象的跨進(jìn)程傳輸本質(zhì)上都是反序列化的過(guò)程,這就是為什么 AIDL 中自定義對(duì)象都必須要實(shí)現(xiàn) Parcelable 接口的原因;雖然說(shuō)多次跨進(jìn)程傳輸客戶端的同一個(gè)對(duì)象會(huì)在服務(wù)端生成不同的對(duì)象,但是這些新生成的對(duì)象有一個(gè)共同點(diǎn),那就是它們底層的 Binder 對(duì)象是同一個(gè);客戶端調(diào)用遠(yuǎn)程服務(wù)的方法,被調(diào)用的方法運(yùn)行在服務(wù)端的 Binder 線程池中,同時(shí)客戶端線程會(huì)被掛起,服務(wù)器端方法不能執(zhí)行耗時(shí)的方法(如果是客戶端是 UI 線程的話),防止 ANR;客戶端的 onServiceConnected 和 onServiceDisconnected 方法都運(yùn)行在 UI 線程中,所以也不可以在它們里面直接調(diào)用服務(wù)端的耗時(shí)方法;流式套接字 和 用戶數(shù)據(jù)報(bào)套接字;流式套接字對(duì)應(yīng)著網(wǎng)絡(luò)中傳輸控制層的 TCP 協(xié)議;用戶數(shù)據(jù)報(bào)套接字對(duì)應(yīng)著網(wǎng)絡(luò)中傳輸控制層的 UDP 協(xié)議;Socket 本身可以支持傳輸任意字節(jié)流,實(shí)現(xiàn)信息的傳輸,是一種 IPC 方式;實(shí)際上,通過(guò) Socket 不僅僅能實(shí)現(xiàn)進(jìn)程間的通信,還可以實(shí)現(xiàn)設(shè)備之間的通信(前提是這些設(shè)備之間的 IP 地址相互可見(jiàn));| / 名稱 / | / 優(yōu)點(diǎn) / | / 缺點(diǎn) / | / 適用場(chǎng)景 / |
|---|---|---|---|
| / Bundle / | / 簡(jiǎn)單易用 / | / 只能支持 Bundle 支持的數(shù)據(jù)類型 / | / 四大組件之間的進(jìn)程間通信 / |
| / 文件共享 / | / 簡(jiǎn)單易用 / | / 不適合高并發(fā)場(chǎng)景,并且無(wú)法做到進(jìn)程間的即時(shí)通信 / | / 無(wú)并發(fā)訪問(wèn)情形,交換簡(jiǎn)單的數(shù)據(jù),實(shí)時(shí)性不高的場(chǎng)景 / |
| / AIDL / | / 功能強(qiáng)大,支持一對(duì)多并發(fā)通信,支持實(shí)時(shí)通信 / | / 使用稍復(fù)雜,需要處理好線程同步 / | 一對(duì)多通信且有 RPC 需求 / |
| / Messenger / | / 功能一般,支持一對(duì)多串行通信,支持實(shí)時(shí)通信 / | / 不能很好地處理高并發(fā)情形,不支持 RPC,數(shù)據(jù)通過(guò) Message 進(jìn)行傳輸,因此只能傳輸 Bundle 支持的數(shù)據(jù)類型 / | / 低并發(fā)的一對(duì)多即時(shí)通信,無(wú) RPC 需求,或者無(wú)要返回結(jié)果的 RPC 需求 / |
| / ContentProvider / | / 在數(shù)據(jù)源訪問(wèn)方面功能強(qiáng)大,支持一對(duì)多并發(fā)數(shù)據(jù)共享,可通過(guò) Call 方法擴(kuò)展其他操作 / | / 可以理解為受約束的 AIDL,主要提供數(shù)據(jù)源的 CRUD 操作 / | 一對(duì)多的進(jìn)程間的數(shù)據(jù)共享 |
| / Socket / | / 功能強(qiáng)大,可以通過(guò)網(wǎng)絡(luò)傳輸字節(jié)流,支持一對(duì)多并發(fā)實(shí)時(shí)通信 / | / 實(shí)現(xiàn)細(xì)節(jié)稍微有點(diǎn)繁瑣,不支持直接的 RPC / | / 網(wǎng)絡(luò)數(shù)據(jù)交換 / |
End.
Note by HF. Learn from 《Android 開(kāi)發(fā)藝術(shù)探索》
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注