谈谈自己对于Binder的理解

Binder 是什么?

Binder是Android的一种主要跨进程的通讯方式。

Android为什么要用Binder作为跨进程的通讯方式?

一般说到来跨进程的通讯方式常用的有以下几种:
1.socket 比较重量级了一般用在网络通讯 性能差
2.文件 性能差io多
3.共享内存 高效 但安全性差
4.管道 需要2次拷贝
5.binder是一种特殊管道 1.速度快比常规管道少了一次拷贝,2.安全

Binder运行机制流程以及怎么实现一次拷贝,保证安全性

链接: service_manager.c.
1.在Android中会启动ServiceManager来Binder对查询注册Binder在service_manager.c文件中可以知道启动service_manager.c 的main方法时候就会打开/dev/binder驱动使用mmap完成将/dev/binder映射到内存中。
2.Android当Service注册到service_manager的时候通过分配的用户id和pid只需完成了用户空间对/dev/binder驱动中系统空间的映射指向。
3.Android当跨进程组件需要去使用Binder的时候通过会service_manager去查找到注册的binder服务这个时候就完成了对系统空间的映射查找。
4.当需要交互的时候就只需要通过ioctl去读写即可,就没有多余的io打开关闭操作了这样就实现了binder的高效。
5.很显然binder尽管和共享内存一样都是对一块内存去读写但实际上binder是采用service_manager去隔离了service和client。并且在交互数据的时候也采用了代理binder对象映射标识查找到数据,因此也保证了他的安全性。

自己如何在Android中使用Binder

1.创建运行在不同两个进程组件(可以是一个跨进程的Service也可以是两个)
2.生成创建AIDL文件,编译器会通过APT技术生成相关Binder代理类
3.两个组件同时拷贝一份AIDL文件(如果在同一应用中不需要拷贝)
4.创建一个Service返回AIDL的Binder作为服务端
5.另一个组件作为客户端,bindService成功后获取到AIDL对象即可调用。
感兴趣的可以自己尝试写一下。

应用场景

1.多进程隔离保证安全的
2.应用数据共享的
3.更多的应用场景可以开动自己的脑筋

简单小Demo代码链接

链接: Demo.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值