一、Binder
1.Binder在Android系统中用于跨进程通信(IPC,Inter Process Communication)。
2.Binder提供了进程间通信的安全性机制,包括权限验证和数据传输的序列化/反序列化过程。使用了权限检查和UID/PID检查等安全机制来确保通信安全。
3.Binder基于C/S架构,涉及3种角色:客户端、服务端、服务管理器。
4.客户端进程通过Linux内核中的一个Binder驱动(/dev/binder)与服务器进程进行通信,服务管理器负责维护服务的注册、查找和管理。
5.Binder使用共享内存来在进程间传输数据,更加高效。
6.所有Binder对象都必须实现IBinder接口。此接口定义了基本的跨进程通信方法,如transact()和queryLocalService()等。
7.SystemServer进程和四大组件(Activity、Service、Broadcast Receiver、Content Provider)都依赖于Binder提供服务。
8.Binder支持多种编程语言,如Java、C++等。
二、 AIDL
1.AIDL 是 Android Interface Definition Language的英文缩写,意思是Android接口定义语言,是Android平台上用于定义客户端和服务端之间交互的语言。
2.使用 AIDL 可以帮助我们发布以及调用远程服务,实现跨进程通信。AIDL通过Android底层的Binder机制来实现跨进程通信。
3.编译器使用AIDL文件生成一段代码,通过预先定义的接口达到两个进程内部跨进程访问对象的目的。需要完成2件事情:
1) 定义AIDL的相关类。
2) 调用 AIDL 产生的文件。
4.将服务的 AIDL 放到对应的 src 目录,IDE在build 目录下会生成相应的接口类。
5.所有传递给AIDL方法的参数和返回值都必须能够被序列化。
6.参数可以传递基本数据类型、 String、CharSequence、List、Map、Parcelable及AIDL接口本身。
7.服务端的AIDL方法调用是在Binder线程池中执行的,不是在主线程中执行的。
8.由于AIDL接口是公开的,因此服务提供的接口方法应该进行适当的安全检查。
9.在AIDL中,in、out、inout标识符用来表示数据的流向:in表示数据只能由客户端流向服务端,out表示数据只能由服务端流向客户端,而inout表示数据可在服务端与客户端之间双向流通。
三、IPC(进程间通信)
1.Android的 IPC 通信方式包括:Binder、ContentProvider、套接字Socket、文件共享、Messenger(基于消息传递的IPC方式,使用Handler来发送接收信息)、AIDL(底层基于Binder实现)等。
2.操作系统的IPC通信方式包括:共享内存、套接字Socket(不仅可用于网络通信,也可以用于同一台机器上不同进程间的通信)、管道(单向的,分为匿名管道和命名管道)、消息队列、信号量、远程过程调用RPC(Remote Procedure Call)等。
微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。
我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。
欢迎关注。助您在编程路上越走越好!