简书 android binder,Android Binder

Binder整理

1、IPC: 进程间通讯或者夸进程通信

windows ipc方式:剪贴板、管道、邮槽等等

linux pic方式:管道、信号量、共享内容等等

Android是基于linux的,但是android有自己的特有的ipc方式:binder。

2、进程与线程是什么、有什么关系。

3、Android开启多进程的方式:基于四大组件的android:process属性,:remote代表代表该进程的私有进程,其他的应用组件不可以跑入这个进程,没有冒号代表全局进程,其他进程可以共享这个进程。还有一个开始方式通过jni在native层去fork一个新的进场,这个不细研究了。

uid:这个是应用在安装的时候系统给应用分配的唯一的uid,只有uid相同的才可以共享数据,当两个应用的shareId相同并且签名也相同的话,他们就可以跑在一个进程里面,他们可以访问对方的私有数据例如:共享组件信息,data目录,共享内存等,

应用在创建新的进程时会执行新的application初始化工作,系统会给他分配单独的虚拟机,所以对于一些可修改静态的值,在一个应用的两个进场可能会是不同的值,当然他们内存地址也不是同一个。

4、Serializable、Parcelable 数据传递(intent、网咯、binder)是可序列化的,熟悉两种序列化的优缺点。

5、android 实现夸进程的方式:共享文件、sp、Intent传递数据、Messenger、contentProvider、aidl、socket等等。而Intent传递数据、contentProvider、Messenger、aidl主要用的是binder。

intent、bandle本身是实现Parcelable接口的,并且他们也可以携带参数需要熟悉他们能传递的参数,这些参数通过他们可以实现跨进程通信。

aidl:是快速实现binder的语言,在aidl目录创建aidl接口文件,环境会自动生成实现接口的jave binder类。

实现binder不一定要用aidl语言,他有特定的格式只是让你快速实现

binder,对于binder我们完全可以自己仿照他的binder实现自己写出来。

Messenger:底层是由aidl实现的,可快速实现多对一的串行通信,实现起来比较简单,binder一个Service,在service和Activity都创建Messenger 通讯即可。

contentProvider:底层也是binder来实现的数据通信。

6、Binder连接池:实现方式定义一个获取binder方法(queryBinder(int binderCode))的aidl接口文件,开启的服务直接返回该binder,在由该binder里的获取binder的方法获取我们的各个其他的binder。

83ee73b88e62

binder.png

7、binder使用场景和比较

83ee73b88e62

binder1.png

8,AIDL理解,通信中的几个角色

AIDLIInterface extend android.os.IInterface aidl接口:开发者继承该接口声明自己的业务接口。

Stub extends android.os.Binder implements AIDLIInterface 服务器Binder传输类,服务器bindler要实现的抽象类

Proxy implements AIDLIInterface 客户端Binder传输类,里面封装的服务端IBinder,可作为服务端的在客户端的句柄,通过它来像服务端传输数据。

SSS extend Stub 真正实现AIDLIInterface接口的服务端bindler。

9,bindler通讯数据需要一次拷贝,socket进程通信需要两次拷贝,共享内存无需拷贝用户空间和内核空间(逻辑内存)映射到同一块物理内存。

socket效率低,并且两个应用通信安全性无法保证,应用端通过虚假的pid传输数据安全性无法保证

共享内存直接操纵内存,数据需要同步机制,不好维护,控制复杂

Bindler 为每个APP分配UID 同时支持实名和匿名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值