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

Posted Android高级知识分享官

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android binder深入分析之承上启下的native层相关的知识,希望对你有一定的参考价值。

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

创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

以上是关于android binder深入分析之承上启下的native层的主要内容,如果未能解决你的问题,请参考以下文章

Android-深入理解Binder

Android-深入理解Binder

[gitbook] Android框架分析系列之Android Binder详解

[gitbook] Android框架分析系列之Android Binder详解

Android Binder设计与实现篇

《深入理解Android 卷III》第二章 深入理解Java Binder和MessageQueue