Binder

来源:互联网 发布:jquery.form.js cdn 编辑:程序博客网 时间:2024/06/06 03:04

Binder是来进行   IPC 说白了也就两个进程间通信的

什么样的情况下会用到进程间通信呢

其实一个应用之间的两个activity之间的跳转就是进程间通信  为什么是这样的呢

在我们的手机上有很多东西   不是在某一个应用里面的    比如说是系统服务     如果应用要使用系统服务  这就是跨进程

 比如说  activitymanagerservice   pakagermanagerservice  和很多操作都要跟系统服务打交道

 为什么不封装起来交给sdk层这样的好处是 复用 可以解决应用的性能上面的问题  要分配更多的内存

 其次 供应用层调用  应用程序就可能会通过反射的方式截取服务 其他的应用程序就无法使用 会造成安全问题


我们通常都会下意识的认为我们自己的应用内activity的跳转是同一个进程之间的通讯

其实对于整个系统而言  每一个activity 界面都是平等的一样的 他只管进程的栈   当前任务栈    历史任务栈   他只管当前显示那个界面  停用那个界面 ,哪个应该被销毁

我们通常将的activity 存放在一个栈里面     他实际上就是保存到系统服务的栈里面    所以在我们自己的应用里面无法获取本进程的任务栈

只能通过其他的逻辑操作将自己的activity存放到一个集合里面通过判断当前的activity 的个数来判断这个应用程序是否退出

但是这并不是任务栈

所以本应用的activity的跳转是进程间通讯 (是对整个系统而言 而不是单指应用程序)

ARDL的业务逻辑就是

就是应用a与应用b通信   就是A要调用b的某些方法或者修改b的属性、

必须要统一一个语言  必须要在a和b定义一模一样的接口包括包名都要一样

底层利用Binder 分配一块内存  进行通信

Binder就起到一个桥接的作用

android的aidl利用接口与底层binder进行交互

binder里面存放的是等待被链接的进程的aidl信息

Binder决定用哪个aidl链接

一个进程里面有多个aidl的引用 通过Ibinder返回给我们建立链接

通过Stub获取从Binder里面返回的数据

从Proxy中 发送数据