Binder、AIDL、IPC大展神威

程序员小迷 2024-08-04 11:38:07

一、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等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

0 阅读:1

程序员小迷

简介:致力于Android、iOS、C、Java等编程技术的技巧经验分享