Android跨进程通信中,对Binder的不完全理解
来源:互联网 发布:淘宝碧素堂面膜怎么样 编辑:程序博客网 时间:2024/05/29 07:10
参考文章:
http://www.jianshu.com/p/1eff5a13000d
http://www.jianshu.com/p/467016b4487c
本文需要结合上面参考文献进行理解。
两个接口
跨进程通讯中说到Binder和AIDL,就要说到最重要的两个接口:IBinder和IInterface。
Binder具有被跨进程传输的能力是因为它实现了IBinder接口。系统会为每个实现了该接口的对象提供跨进程传输。那跨进程通信时,传输数据的媒介就是实现了IBinder的实例。
有了IBinder,IInterface又有啥用呢?我个人理解:这个接口只是为了方面操作(只有一个asbinder()方法嘛)。
那aidl文件和自动生成的同名的java文件是啥?aidl就是个接口咯,重点就在那个自动生成的java文件身上。这个java文件乍一看很大很乱,其实它的作用很简单:还是方便操作(咳咳,有点官方了)。下面一段细说。
通信方式
将通信看成是进程A和进程B的通信。进程A看作客户端,进程B看作服务器,我们想的通信过程:
1. 进程A将数据传递给进程B
2. 数据在进程B中进行处理
3. 进程A获取处理后的数据
4. 完美
然而实际是这样滴:
1. 进程B中定义实现了方法的Binder
2. 进程A获取进程B的Binder
3. 进程A使用进程B的Binder来处理数据
假设A为一个Activity,B为一个Service。
A:有一个实现了IInterface的成员变量。一个ServiceConnection成员变量。ServiceConnection是用来接受从B中传过来的Binder的。
B:一个Binder成员变量(比较特别的是,这个Binder类是实现了IInterface接口的子类),并实现自定义接口中的方法。
下面来分析aidl文件同名的java的类里有啥呢:一个子类Stub(extends Binder, inplements自定义的接口),basicTypes()方法,未实现的自定义方法。
dang dang dang,这个Stub类就是上面说的传递的Binder。是不是说到这里该结束了,其实并没有。它的流程有点复杂,至于为什么这么复杂,其实我也不知道。(笑哭,以后分析)进程A获取到的Binder并不是是这个Stub,而是Stub的一个代理/替身——Proxy。
跨进程用替身(代理)
Stub里面有啥呢:asInterface()方法、asBinder()方法、onTransact()方法、Proxy类。Proxy是它的替身。asInterface是个static方法:如果两个组件进程不同,那么它返回Proxy;如果是同一进程,则返回自身。
替身套路与本身也不同,Proxy同样也实现了aidl接口中的方法,而实现方法中其实还是调B的Stub的方法(通过onTransact进行调用)。
- Android跨进程通信中,对Binder的不完全理解
- android 跨进程通信的代表Binder
- Android 跨进程通信--Binder
- Android跨进程通信-Binder连接池的使用
- Android中跨进程通信的IPC机制(Binder框架)
- Android中的Binder跨进程通信机制
- Android Binder跨进程通信原理分析
- Android Binder跨进程通信原理分析
- Android Binder跨进程通信原理分析
- Android中跨进程通信的方式
- Android中跨进程通信
- android 利用AIDL实现Binder跨进程通信
- Android 中的Binder跨进程通信机制与AIDL
- Android中的跨进程通信AIDL、Binder源码详解
- Android-服务跨进程通信(Binder/Messenger/AIDL)
- 图文详解 Android Binder跨进程通信机制 原理
- 跨进程通信中AIDL文件的理解
- Android的跨进程通信
- javaScript 笔记
- Spring MVC之DispatcherServlet解析
- MyBatis事物处理
- Myeclipse2014编辑JavaScript点"."的时候会卡死的解决办法
- Python正则表达式
- Android跨进程通信中,对Binder的不完全理解
- windows之UIAutomation鼠标操作
- web uploader在Firefox下上传点击无效的解决方法
- 如何设置输入框input中placeholder的字体颜色、字号
- Java集合框架之_泛型
- hdu4405[Aeroplane chess] 有点懂了期望概率DP
- Log4j 重写 RollingFileAppender 实现按日期生成文件夹文件名
- 编写MANIFEST.MF文件时的注意事项:
- mkv210_image.c文件