java 服务如何注册到c++binder驱动中的?

原创
2021/12/01 08:31
阅读数 120

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章讲解。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部