前面几篇文章介绍了 C++ 层服务的注册流程,首先通过 defaultServiceManager() 得到的 BpInterface 与 servciemanager 进行通信,最后通过 addServcie() 注册服务。这里我们来看一下获取服务的流程。
一、获取服务
这个接口有两种方式,一个是通过 defaultServiceManager() 获取到 servicemanager 的 BpBinder,然后再通过该代理的 getService() 进行调用。另一个是 IServiceManager.h 中直接提供了全局的接口函数。我们分别来看一下,先看一下比较简单的全局接口函数获取方式。
1、全局接口
源码位置:frameworks/native/libs/binder/include/binder/IServiceManager.h
template<typename INTERFACE>
status_t getService(const String16& name, sp<INTERFACE>* outService)
{const sp<IServiceManager> sm = defaultServiceManager();if (sm != nullptr) {*outService = interface_cast<INTERFACE>(sm->getService(name));if ((*outService) != nullptr) return NO_ERROR;}return NAME_NOT_FOUND;
}
这里封装了 defaultServiceManager(),然后再调用 getService()。其实还是需要先