7.2019AndroidIPC總結

1.Android開啓多進程的方式

在AndroidManifest中給四大組件指定android:process=""屬性

2.Android多進程通信的方式

1.四大組件中的BroadcastReceiver ,ContentProvider
2.AIDL
3.Messenger
4.Binder

2.使用多進程會造成什麼問題

Android爲每個進程分配一個單獨的虛擬機,每個虛擬機在內存上有不同的地址空間,導致不同虛擬機中訪問同一個類的對象會產生多份副本,在一個進程中修改的只是本進程的副本,不會影響其他虛擬機中的對象
a.靜態成員和單例模式完全失效
b.線程同步機制完全失效
鎖失效,因爲不同進程的鎖對象不是同一個
c.SharePreference的可靠性下降
兩個進程同時寫,會導致數據一定機率的丟失
d.Application會多次創建
當一個組件運行在一個新的進程中,系統要創建新的進程同時分配獨立的虛擬機,所以這個過程就是一個啓動應用的過程,會導致Application重新創建

IPC基礎概念

Serializable Parcelable
區別
1.Serializable是Java中的序列化接口,使用簡單但是開銷很大,序列化和反序列化過程會設計大量IO操作
2.Parcelable是Android中的序列化方式,更適合在Android平臺使用,缺點是使用麻煩但是效率很高,
3.Parcelable主要用在內存序列化上,通過它將對象序列化到存儲設備中或者將對象序列化後通過網絡傳輸也是可以的,但是這個過程會比較複雜,所以這兩種情況推薦使用Serializable,

Binder

什麼是binder
爲什麼要使用binder

1.性能。Binder只需要一次數據拷貝,傳統IPC方式管道,消息隊列,Socket都要兩次,共享內存方式只需要一詞,但實現複雜,不適合移動設備
2.安全。binder機制協議支持對通信雙方身份做校驗
3.調用簡單。面向對象的調用方式,使用binder就像調用一個本地實例

binder的線程管理

每個binder的server進程會創建很多線程來處理binder請求,可以理解爲線程池,這些線程由binder驅動進行管理,一個進程的binder線程數默認最大16,所以同時只能有16個線程在跑

binder的運行機制

基於C/S通信模式,包含四個通信角色:Client進程,Server進程,ServiceManager進程,Binder驅動
ServiceManager進程的作用是將字符形式的binder名轉化爲client中對該binder的引用,使得client能夠通過binder名字獲得對server中binder實體的引用
binder驅動的作用是負責建立進程間binder通信,binder在進程間的傳遞,binder引用計數管理,數據包在進程之間的傳遞和交互

binder工作流程

1.客戶端獲取服務端代理對象
2.客戶端調用代理對象向服務端發送請求
3.代理對象將用戶請求通過binder驅動發送到服務端進程
4.服務端進程處理用戶請求,並將結果通過binder驅動發揮給代理對象
5.客戶端收到返回結果

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