binder是什么?可以理解為Andorid系統中的一種進程間通信的方式,雖然Android系統基于Linux,但是它并沒有采用Linux自帶的進程間通信方式,而是采用了更高效的binder,理解binder對于理解Android系統具有至關重要的作用。binder原理圖如下:
Binder通信采用c/s架構,和Socket一樣,但是稍微復雜。binder組件包含Client、Server、ServiceManager以及binder驅動,其中ServiceManager用于管理系統中的各種服務。
具體通信過程:Server先向ServiceManager注冊一個服務,其實也就是一個字符串。然后Client從ServiceManager獲取服務,關鍵字就是注冊的字符串。這樣Client和Server就可以通信。真正的數據流是走了底層的Linux內核空間的binder驅動,但這個是被封裝的,所以不用關心真正的binder驅動,只管在Client和Server之間調用函數收發數據就行。就是服務端的onTransact函數和客戶端remote()-》transact(TEST,data, &reply),發送的數據存在data中,返回的數據存在reply中。Client和Server都可以收發數據。
安卓系統架構圖:
理解了binder以后,具體分析:binder驅動肯定是在最下面的Linux內核中,那么binder的客戶端和服務器,可以存在在任何地方。舉例:
1、bindder服務器在app層,客戶端在app層。2、bindder服務器在native層,客戶端在app層。3、bindder服務器在app層,客戶端在native層。4、bindder服務器在native層,客戶端在native層。
以上四種情況都可以。
說的比較抽象,我發兩篇文章連接,這兩篇文章的代碼我已經驗證過,可以使用。需要注意的是,APP層的binder由java語言編寫,native層的binder,由C++語言編寫。但其實接口都很相似。
-
通信
+關注
關注
18文章
5977瀏覽量
135871 -
Andorid
+關注
關注
0文章
7瀏覽量
6981 -
系統
+關注
關注
1文章
1010瀏覽量
21320
發布評論請先 登錄
相關推薦
評論