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對象