分享

Binder机制(非常好理解)

 开花结果 2022-06-09 发布于北京

Binder是一种进程间通信机制,用来实现不同进程之间的通信。

Binder机制主要由四大块组成,分别是客户空间的client、server,serverManager,还有内核的Binder驱动。

下面我先看下图,利于理解Binder内部工作机制:

服务器端。一个Binder服务器端就是一个Binder类的对象。当创建一个Binder对象后,内部就会开启一个线程,这个线程用于接收binder驱

动发送的信息,收到消息后,会执行相关的服务代码。、

Binder驱动。当服务端成功创建一个Binder对象后,Binder驱动也会相应创建一个mRemote对象,该对象的类型也是Binder类。客户就可以

借助这个mRemote对象来访问远程服务。

客户端。客户端要想访问Binder的远程服务,就必须获取远程服务的Binder对象在binder驱动层对应的mRemote引用。当获取到mRemote对

象的引用后,就可以调用相应Binder对象的服务了。

在这里,我们可以看到,客户端是通过Binder驱动来调用服务端的相关服务。首先,在服务端创建一个Binder对象,然后相应在Binder驱动中创建一个Binder对象,接着客户端通过获取

Binder驱动中Binder对象的引用来调用服务端的服务。在Binder机制中正是借着Binder驱动将不同进程间的组件bind(粘连)在一起,实现通信。

为什么android官方推荐使用Binder机制?

从三个方面:可靠性、传输性、安全性

可靠性:

基于Client-Server的通信方式,系统不复杂,在资源有限的手机上,就显得非常可靠。

传输性能:强

Socket:传输效率低,开销大

消息队列和管道采用存储-转发方式:即数据先从发送方缓存区拷贝到内核开辟的一块缓存区中,然后从内核缓存区拷贝到接收方缓存区,其过程至少有两次拷贝

共享内存:无需拷贝,但控制复杂

综上,Binder机制是非常有效的

安全性:

由内核来添加可靠的UID,保证安全。

Bindler机制一个非常好的应用场景:

AIDL:

什么是AIDL?怎么用?

*AIDL:Android Interface definition Language 安卓接口定义语言

(1)作用:发布和调用远程服务,实现跨进程通信

(2)将服务的aidl放到对应的src文件夹中,工程的gen会产生对应的接口类

(3)通过bindservice方法绑定远程服务

(4)通过IBinder 获取到的对象,该对象既可以和我们的进程通信,又可以和远程进程通信,充当了中间通信的角色。


原文链接:https://blog.csdn.net/tiancizhu/article/details/52434326

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多