Android Binder 面試知識小結

Binder是Android中的一種跨進程通信方式。從Android Framework 角度來說Binder是ServiceManager連接各種Manager(ActivityManager、WindowManager等等)和相應ManagerService的橋樑;從Android應用層來說Binder是客服端與服務端進行通信的媒介。下面 對 Binder 面試知識基本面試知識的做個小結,方便後期知識的回顧、補充。
推薦博文:
簡單明瞭,徹底地理解Binder
Android進程間通信(IPC)機制Binder簡要介紹和學習計劃

1、 Linux 內核基礎知識

  • 進程隔離/虛擬地址空間:
    進程間是相互獨立的,數據不能共享,互不干擾,不同的進程分配在不同的虛擬地址空間中。

  • 系統調用:
    對內核保護,只對應用程序開放許可的資源;允許應用程序通過系統調用調用內核的部分開放程序。

  • binder驅動:負責各個應用進程間,通過binder通信內核來進行交互的模塊。

3、爲什麼使用Binder

  • 性能:相比傳統的Socket更高效。
  • 安全:安全性高,支持通信雙方進行身份驗證。

4、Binder通信模型

binder通信模型

1、註冊建立ServiceManager表。
2、Service1、Service2通過Binder驅動申請註冊到ServiceManager中。
3、Client需要與Service2進行通信,跨進程無法直接通信,需要先通過ServiceManger中查詢到Service2。藉助Binder驅動返回一個Service2的代理對象。Client直接跟Service2代理對象進行操作,通過Binder驅動映射操作Service2真實對象,從而完成通信。

5、Binder跨進程通信

Binder跨進程通信

  • Service向SM查找表中註冊了Object對象的add()方法;
  • Client想調用Service中Object對象的add()方法,需要通過Binder驅動向SM查找表中查詢是否有Object對象的add()方法,有則返回Client一個Object對象的代理對象Proxy ;
  • Client 調用代理對象Proxy的add()方法,Binder驅動進行接收處理去調用真實對象Object的add()方法;
  • Object的add()方法執行後返回結果給SM,SM通過Binder驅動將結果返回給Client。
小結:

客戶端進程只是持有了服務端進程的一個代理,通過代理對象協助驅動完成跨進程通信。

6、什麼是Binder?

  • Binder是一種通信機制;
  • 對於Service來說Binder指的是Binder本地對象,對於Client來說Binder指的是Binder的代理對象;
  • 對於傳輸過程而言,Binder是可以跨進程傳遞的對象。

7、AIDL

Android:學習AIDL,這一篇文章就夠了(上)

  • 支持的數據傳遞類型:
    基本數據類型(short 除外)、String、charSequehce、List(元素得序列化)、Map(元素得序列化)、parcelable。

  • 應用場景:
    AIDL: IPC、多個應用程序、多線程;
    Binder: IPC、多個應用程序、沒有多線程;
    Messager: IPC、沒有多線程;

  • 通信過程:

    • 客戶端通過aidl文件生成的java類 中的Stub.asInterface()方法,得到Proxy代理類
    • 通過調用Proxy代理類的方法,將參數進行打包後,調用IBinder 的transact()方法,交給底層處理,再回調onTransact()方法,將參數進行解包,調用服務端對應的方法,並將執行結果返回。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章