Binder、 AIDL 、IPC 大展神威

一、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 产生的 class文件。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值