对于 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;
}
这里主要关注两点:
标签:服务,java,sServiceManager,Binder,ServiceManager,Java,Android From: https://blog.csdn.net/c19344881x/article/details/137224839
- BidnerInternal.getcon