android binder深入分析之承上启下的native层

106 阅读1分钟

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个部分

2、Proxy接口代理对象调用到驱动部分

3、Proxy接口获取到驱动数据后返回给java层部分