0%

Android FrameWork - Binder 获取服务(getService)

获取服务

在Native层的服务注册,我们选择以media为例来展开讲解,先来看看media的类关系图

流程图UML

avatar

总结

请求服务(getService)过程,就是向servicemanager进程查询指定服务,当执行binder_transaction()时,会区分请求服务所属进程情况。

  1. 当请求服务的进程与服务属于不同进程,则为请求服务所在进程创建binder_ref对象,指向服务进程中的binder_node;
    最终readStrongBinder(),返回的是BpBinder对象;
  2. 当请求服务的进程与服务属于同一进程,则不再创建新对象,只是引用计数加1,并且修改type为BINDER_TYPE_BINDER或BINDER_TYPE_WEAK_BINDER。
  • 最终readStrongBinder(),返回的是BBinder对象的真实子类;