对于 Java 端使用 Binder 服务,主要就是注册服务和获取服务,入口都是通过 ServiceManager.java 中的对应方法实现。这里我们就先介绍一下 Java 注册 Binder 服务的流程。
一、ServiceManager代理
无论是 ServiceManager.addService() 还是 ServiceManager.getService() 最终都是需要与native 通信,那需要获取到 ServiceManager 的代理。即函数 getIServiceManager()。
1、ServiceManager
源码位置:/frameworks/base/core/java/android/os/ServiceManager.java
private static IServiceManager getIServiceManager() {// 采用单例形式返回 ServiceManagerProxy对象if (sServiceManager != null) {return sServiceManager;}// 找到服务管理器,相当于 new ServiceManagerProxy(new BinderProxy); sServiceManager = ServiceManagerNative.asInterface(Binder.allowBlocking(BinderInternal.getContextObject()));return sServiceManager;
}
这里主要关注两点:
- BidnerInternal.getcon