Android IPC多進程通信總結

IPC(Inter-Process Communication) 進程間通信,是指兩個不同進程之間數據交換的過程。一般在Android程序中一個進程就是一個程序(無特別代碼實現的情況下),而一個程序分配的是單獨的虛擬機,一個進程可以包含多個線程。每一個進程都有它自己的地址空間,一般情況下,包括文本區域(text region)、數據區域(data region)和堆棧(stack region),那麼問題來了,兩個進程間如何通信呢?本章不做詳細介紹如何使用,只做一個總結,如詳細研究請移步。

爲什麼要多進程?

1、一個進程Android分配的內存有限,早些Android版本一個進程只分配16M,如果一個應用太大,那麼一個進程就無法滿足。

2、守護進程:防止進程被kill

3、當前應用需要向其他應用獲取數據。由於是兩個應用,即兩個進程。

*序列化的原因?

1、永久保存對象的字節序列到本地文件中
2、使對象可以在網絡中 ipc中傳遞

*序列化接口

1、serializable接口:實現較簡單、開銷大、需要大量IO操作。適合將對象序列化到存儲設備、對象序列化後通過網絡傳輸
2、parcelable接口:是Android中的序列化方式、使用麻煩、效率高 適用於內存序列化上

*Binder介紹

用途:主要用於在service中、是一種跨進程通信方式
說明:aidl底層就是binder實現的;
如果binder突然死亡:需要在linkToDeath設置一個死亡代理來重新發起連接請求恢復連接

*binder連接池

目的:避免重複創建service
原理:根據不同的bindercode返回不同的binder對象然後進行操作
更新就只需要新建aidl文件、在bindpool中添加一個新的bindercode然後返回binder對象就好了

*Android中的IPC方式

Bundle:四大組件間的進程間通信方式,簡單易用,但傳輸的數據類型受限。
文件共享: 不適合高併發場景,並且無法做到進程間的及時通信。
Messenger: 數據通過Message傳輸,只能傳輸Bundle支持的類型
ContentProvider:android 系統提供的。簡單易用。但使用受限,只能根據特定規則訪問數據。
AIDL:功能強大,支持實時通信,但使用稍微複雜。
Socket:網絡數據交換的常用方式。不推薦使用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章