java 服務如何註冊到c++binder驅動中的?

1,在硬件訪問服務比如FregService的初始化的時候,會調用native init函數,通過Jni訪問android_util_Binder.cpp下的android_os_Binder_init方法
2,在上述方法中,會初始化javaBBinderHolder實例,該實例會包含FregService對象句柄
3,在ServiceManager.java中的addService方法中,會getIServiceManager().addService(name,service)進行註冊
4,來到ServieManagerNative.java,繼續調用addServie方法,關鍵代碼
   data.writeStringBinder(service);
   mRemote.transact(ADD_SERVICE_TRANSACTION,data,reply,0);
   
5,writeStringBinder通過jni到 android_util_Binder.cpp下的 android_os_Parcel_writeStrongBinder 方法,裏面有個關鍵方法ibinderForJavaObject。
   這個方法會生成JavaBBinder對象實例,包含FregServcie對象句柄。 
6,mRemote.transact調用,實際上是調用BinderProxy下的transact方法,通過jni調用到 android_util_Binder.cpp下的 android_os_BinderProxy_transact方法,
   剩下的就是c++ binder中的service方法註冊了 ,可以參照羅昇陽的相關書籍Android系統源碼系統分析中的第5章講解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章