第二章 IPC機制—學習筆記

這個文集中文章主要是自己在學習中記錄的重要知識點,方便日后查閱。

IPC簡介

IPC:Inter-Process Communication進程間通信或者跨進程通信
進程:在PC或者移動設備上一個程序或者應用,一個進程可以有多個線程
線程:是CPU調度的最小單元

Android里主線程也叫UI線程,只有在UI線程里才能操作界面元素

Android中多進程模式

Android中使用多進程只有一種方法:給四大組件在AndroidMenifest中指定android:process屬性

多進程模式帶來的問題

Android為每個進程都分配一個獨立的虛擬機,不同的虛擬機在內存的分配上是不同的地址空間。這就導致在不同的虛擬機中訪問同一個對象會產生多個副本,所有運行在不同進程的四大組件,只要他們之間需要通過內存來共享數(shù)據(jù),都會共享失敗。這是多進程帶來的影響。

多進程還會帶下如下問題

  1. 靜態(tài)成員和單例模式失效
  2. 線程同步機制完全失效
  3. SharedPreferences可靠性下降
  4. Application多次創(chuàng)建

IPC基礎概念

1.Serializable接口

這是Java提供的序列化接口,可以通過ObjectOutputStreamObjectInputStream進行序列化和反序列化操作
注:通過Serializable進行序列化和反序列化的對象內容是完全一樣的,但兩者并不是同一個對象。

2.Parcelable

只要實現(xiàn)這個接口,一個類的對象就可以實現(xiàn)序列化并可以通過Intent和Binder傳遞。系統(tǒng)中的Intent、Bundle、Bitmap等已經實現(xiàn)了該接口,可以直接序列化。Lsit、Map也可序列化,只要它們中的每個元素都是可以序列化的。

以上兩種接口的異同

Serializable接口是Java中接口,使用簡單開銷大
Parcelable 接口是Android平臺提供,使用略微復雜,效率高,優(yōu)化使用此接口。
但是要是將對象序列化到設備或者用網(wǎng)絡傳輸,過程就會稍顯復雜,建議使用Serializable

3.Binder

Binder是Android實現(xiàn)Ibinder的一個類。
下面從不同角度來介紹Binder的概念:

  • IPC角度:是Android種跨進程通信的方式
  • 虛擬物理設備:設備驅動是/dev/binder
  • Android Framework角度:Binder是ServiceManager連接各種Manager和相應ManagerService的橋梁
  • Android應用層:是服務端和客戶端通信的媒介。

Android中的IPC方式

1.使用Bundle

Activity、Service、Receiver都支持在Intent傳遞Bundle數(shù)據(jù),由于Bundle實現(xiàn)了Parcelable接口,可以在不同進程中傳輸數(shù)據(jù)。

2.文件共享

就是第一個進程中將一個對象序列化到sd卡上的文件里,在第二個進程再將sd卡中的對象內容重新反序列化成對象。這兩個對象是一樣的,但本質上還是一個對象。
文件共享方式,適合對數(shù)據(jù)同步要求不高的進程間的通信,并要妥善處理并發(fā)讀/寫的問題。
不建議在進程間通信使用SharedPreferences,因為在高并發(fā)的讀/寫訪問中,很容易會丟失數(shù)據(jù)。

3.使用Messenger

在Messenger中放入要傳遞的數(shù)據(jù),就可以實現(xiàn)數(shù)據(jù)的進程間傳遞了,它的底層實現(xiàn)的是AIDL。

4.AIDL

(看的不是很清楚,待補充)

5.使用ContentProvider

這就是Android中提供的專門用于不同應用間數(shù)據(jù)共享的方式。其底層實現(xiàn)同樣也是Binder。

6.使用Socket

簡單來說就是通過網(wǎng)絡通信,來實現(xiàn)跨進程通信。

Binder連接池

主要作用就是將每個業(yè)務模塊的Binder請求統(tǒng)一轉發(fā)到遠程Service中,避免重復創(chuàng)建Service。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容