Android 中的AIDL 和 binder机制

一,Binder

1,线程间通信Handler

Handler和Binder是Android通信的两大支柱,Handler是线程间通信的基础,一个App的运行一定是多个线程相互协作的过程,特别是Android子线程不能更新UI界面的限制使得线程间的通信机制Handler尤为重要。

2,进程间通信

2.1 初识Bindler

Android进程间的通信基于Binder机制,Binder并非linux系统标准的通信机制,Android系统选定Binder这种机制实现进程间通信基于以下几个考虑:

1,效率高。

     相对于低效的Socket,两次复制的管道,使用了内存映射的Binder效率高,只需一次复制,效率仅此次于共享内存。

2,稳定。

    Binder基于C/S架构,相对于共享内存的难以控制,Binder要稳定的多。

3,安全。

    通过binder机制,Android系统可以实现根据进程ID请求用户授权访问其他进程的方式提高安全性,比如一个app进程想要访问通讯录,通讯录本质也是一个进程,系统就会提示用户,用户决定是否向该进程授权,系统会保存用户的授权结果。

2.2 Binder构成

Binder是一种进程间通信的解决方案,由Client、Server、ServiceManager、Binder驱动构成。

当Client要调用Server的时候,并不能直接通过运用的方式使用Server的服务,而是通过位于Client端的Server服务代理,基于系统调用,调用内核空间的binder驱动,binder驱动通过ServiceManager找到Server,Server读取内存空间的数据,执行代码逻辑,将执行结果写入内存空间,通过内存映射反映到内核空间,binder将结果返回给Client。

2.3 AIDL使用思路

AIDL是基于Binder提供的Framework层的高效开发方式,一般有服务端定义,并通过Service组件对客户端提供服务。

客户端通过SeviceConnection连接服务端,服务端在接收到客户端的请求时(onBind)将服务端的IBinder实现返回给客户端,当然客户端并不能真正拿到这个对象的引用,而是通过内核空间极其复杂的逻辑转换,得到一个服务端的代理对象,客户端通过这个代理对象与服务端进行通信,客户端在onServiceConnected中获得这个代理对象的引用。

参考文献:

1,Android binder 原理

2,Binder原理之通俗易懂篇

3,非常棒的图解Binder原理,看总结就可以了

发布了87 篇原创文章 · 获赞 14 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/epitomizelu/article/details/103519304