加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
  • 相關推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

Android 系統(tǒng) binder 詳解

2021/09/07
325
閱讀需 4 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

最近博主在研究Android系統(tǒng)的binder。

binder是什么?可以理解為Andorid系統(tǒng)中的一種進程間通信的方式,雖然Android系統(tǒng)基于Linux,但是它并沒有采用Linux自帶的進程間通信方式,而是采用了更高效的binder,理解binder對于理解Android系統(tǒng)具有至關重要的作用。

binder原理圖如下:

Binder通信采用c/s架構(gòu),和Socket一樣,但是稍微復雜。binder組件包含Client、Server、ServiceManager以及binder驅(qū)動,其中ServiceManager用于管理系統(tǒng)中的各種服務。

具體通信過程:Server先向ServiceManager注冊一個服務,其實也就是一個字符串。然后Client從ServiceManager獲取服務,關鍵字就是注冊的字符串。這樣Client和Server就可以通信。真正的數(shù)據(jù)流是走了底層的Linux內(nèi)核空間的binder驅(qū)動,但這個是被封裝的,所以不用關心真正的binder驅(qū)動,只管在Client和Server之間調(diào)用函數(shù)收發(fā)數(shù)據(jù)就行。就是服務端的onTransact函數(shù)和客戶端remote()->transact(TEST, data, &reply),發(fā)送的數(shù)據(jù)存在data中,返回的數(shù)據(jù)存在reply中。Client和Server都可以收發(fā)數(shù)據(jù)。

安卓系統(tǒng)架構(gòu)圖:

理解了binder以后,具體分析:binder驅(qū)動肯定是在最下面的Linux內(nèi)核中,那么binder的客戶端和服務器,可以存在在任何地方。舉例:

1、bindder服務器在app層,客戶端在app層。2、bindder服務器在native層,客戶端在app層。3、bindder服務器在app層,客戶端在native層。4、bindder服務器在native層,客戶端在native層。

以上四種情況都可以。

說的比較抽象,我發(fā)兩篇文章連接,這兩篇文章的代碼我已經(jīng)驗證過,可以使用。需要注意的是,APP層的binder由java語言編寫,native層的binder,由C++語言編寫。但其實接口都很相似。

https://blog.csdn.net/tkwxty/article/details/42712083

https://blog.csdn.net/tkwxty/article/details/102680970

但是要看懂代碼,需要先理解幾個類:

native層binder真實的繼承關系如下:

對稱一點可能方便理解:

我們主要是從BnInterface和BpInterface繼承,去實現(xiàn)自己的服務器和客戶端。

bp:binder proxy

bn:binder native

sm:ServiceManager

今天先講這么多,如果這兩篇文章有不懂的地方可以私聊博主。

谷歌

谷歌

谷歌公司(Google Inc.)成立于1998年9月4日,由拉里·佩奇和謝爾蓋·布林共同創(chuàng)建,被公認為全球最大的搜索引擎公司。谷歌是一家位于美國的跨國科技企業(yè),業(yè)務包括互聯(lián)網(wǎng)搜索、云計算、廣告技術等,同時開發(fā)并提供大量基于互聯(lián)網(wǎng)的產(chǎn)品與服務,其主要利潤來自于關鍵詞廣告等服務。

谷歌公司(Google Inc.)成立于1998年9月4日,由拉里·佩奇和謝爾蓋·布林共同創(chuàng)建,被公認為全球最大的搜索引擎公司。谷歌是一家位于美國的跨國科技企業(yè),業(yè)務包括互聯(lián)網(wǎng)搜索、云計算、廣告技術等,同時開發(fā)并提供大量基于互聯(lián)網(wǎng)的產(chǎn)品與服務,其主要利潤來自于關鍵詞廣告等服務。收起

查看更多

相關推薦

電子產(chǎn)業(yè)圖譜

研究生在讀,熟悉硬件、STM32單片機、嵌入式Linux。已收獲小米、聯(lián)發(fā)科、浙江大華、上能電氣、英威騰、匯川技術、格力、富士康等大廠offer。在這里分享求職經(jīng)驗、嵌入式學習規(guī)劃、考研、嵌入式Linux技術文章等。