Android 跨进程通信AIDL小知识

2018-12-28  本文已影响0人  棒槌爸爸

名词解释:
AIDL(Android 接口定义语言): 它允许你在定义在客户端和服务器两端都识别的程序接口,为的是它们可以互相通过 IPC 机制通信。
在 Android 中,一个进程正常情况下不能访问另一个进程的内存。
换句话说,它们需要解析它们的对象成为操作系统能够理解的原始类型,并且为你序列化边界访问对象。
代码的序列化操作编写是很繁琐的,因此 Android 为你用 AIDL 封装了它。

使用 AIDL 的注意事项:
如果你允许通过 IPC 机制访问你的服务的是来自不同的应用客户端,并且需要在你的服务里处理多进程,使用 AIDL 才是有必要的。
如果你不需要执行并发 IPC 访问不同应用,你应该创建实现了 Binder 的自定义接口,或者如果你需要执行 IPC 但是不需要处理多线程,这种情况下,使用 Messenger 实现你的接口。
不管怎样,在实现 AIDL 之前,确保你理解绑定服务(很重要)。

定义你的服务接口时,需要注意:

AIDL 调用过程:
在你开始设计 AIDL 接口之前,要注意 AIDL 接口调用是直接方法调用。你不用假设调用发生在线程中。在本地进程和在远程进程中一个线程调用情况略有不同,具体如下:

默认情况下,本地进程下, AIDL 调用是同步的;远程进程下,通过使用关键字 oneway 可以指定 AIDL 为异步调用。

上一篇下一篇

猜你喜欢

热点阅读