IPC 原理

http://blog.csdn.net/luoshengyang/article/details/664246

Binder的總體架構(gòu),它由Client、Server、Service Manager和驅(qū)動程序Binder四個組件構(gòu)成。本文著重介紹組件Service Manager,它是整個Binder機制的守護進程,用來管理開發(fā)者創(chuàng)建的各種Server,并且向Client提供查詢Server遠程接口的功能

Android系統(tǒng)進程間通信Binder機制在應用程序框架層的Java接口:

1. 獲取Service Manager的Java遠程接口的過程;

2. HelloService接口的定義;

3. HelloService的啟動過程;

4. Client獲取HelloService的Java遠程接口的過程;

5.? Client通過HelloService的Java遠程接口來使用HelloService提供的服務的過程。

1:

sServiceManager =newServiceManagerProxy(newBinderProxy());

總結(jié)一下,就是在Java層,我們擁有了一個Service Manager遠程接口實現(xiàn)類ServiceManagerProxy,而這個ServiceManagerProxy對象在JNI層有一個句柄值為0的BpBinder對象與之通過gBinderProxyOffsets關聯(lián)起來。

2:

定義aidl,生成Java 根據(jù)IHelloService接口的定義生成相應的Stub和Proxy類,這個就是我們熟悉的Binder機制的內(nèi)容了,即實現(xiàn)這個HelloService的Server必須繼續(xù)于這里的IHelloService.Stub類,而這個HelloService的遠程接口就是這里的IHelloService.Stub.Proxy對象獲得的IHelloService接口

Stub extends android.os.Binder ; ?Proxy implements android.os.IHelloService

3:

HelloService extends ? IHelloService.Stub

在frameworks/base/services/java/com/android/server/SystemServer.java文件中,定義了SystemServer類。SystemServer對象是在系統(tǒng)啟動的時候創(chuàng)建的,它被創(chuàng)建的時候會啟動一個線程來創(chuàng)建HelloService,并且把它添加到Service Manager中去。

會調(diào)用HelloService類的構(gòu)造函數(shù),而HelloService類繼承于IHelloService.Stub類,IHelloService.Stub類又繼承了Binder類,因此,最后會調(diào)用Binder類的構(gòu)造函數(shù)

>一系列JNI

最后,通過BpBinder::transact函數(shù)進入到Binder驅(qū)動程序,然后Binder驅(qū)動程序喚醒Service Manager響應這個ADD_SERVICE_TRANSACTION請求

4:

return IHelloService.Stub.asInterface(ServiceManager.getService("hello"));,實際上是一個IHelloService.Stub.Proxy對象

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

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容