android binder深入分析之承上启下的native层
一问到binder是怎么跨进程通信的?那么同学们肯定大部分回答:binder最后调到底层还是通过binder驱动来实现跨进程通信的。那么这里就要问一下:请问android中一个app层面的binder调用,是怎么一步步调用到了底层binder驱动呢?这也就是本节要给大家来详细剖析的,一共分为3大部分。
1、ServiceManager获取java类型Proxy对象部分 2、Proxy接口代理对象调用到驱动部分 3、Proxy接口获取到驱动数据后返回给java层部分
1、ServiceManager获取java类型Proxy对象部分
平时系统中获取某一个服务,一般都是最后都是ServiceManager.getService这种方式,来看看它的源码:
//ServiceManager.java中
public static IBinder getService(String name) {
try {
//缓存中获取,第一次缓存没有
IBinder service = sCache.get(name);
if (service != null) {
return service;
} else {
//Binder.allowBlocking仅仅是为了提示是否为阻塞行接口,没有实际干活
return Binder.allowBlocking(getIServiceManager().getService(name));
}
} catch (RemoteException e) {
Log.e(TAG, "error in getService", e);
}
return null;
}
这里大家可以看到实际真正干活的是getIServiceManager().getService(name),这里又分为2个部分