Android进程通信之Messenger&AIDL使用详解
Posted 王三的猫阿德
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android进程通信之Messenger&AIDL使用详解相关的知识,希望对你有一定的参考价值。
转载注明出处:http://blog.csdn.net/xiaohanluo/article/details/53911529
1. 前言
提到的进程间通信(IPC:Inter-Process Communication),在android系统中,一个进程是不能直接访问另一个进程的内存的,需要提供一些机制在不同的进程之间进行通信,Android官方推出了AIDL(Android Interface Definition Language),它是基于Binder机制的,至于官方为什么要采用Binder,查看为什么Android要采用Binder作为IPC机制,分析很全面。
上篇Android之Service的细枝末节提到组件在与Service通信方法有三种。
- 实现IBinder
- Messenger
- AIDL
后面两种可以跨进程通信,是基于Binder机制的通信方式。
2. 使用时机
在确定使用什么机制之前,首先了解应用场景。Android系统中,如果组件与服务通信是在同一进程,就使用第一种方式;如果是跨进程通信,使用第二种和第三种,两者不同在于,Messenger不能处理多线程并发请求。
3. AIDL使用
AIDL是可以处理多线程访问的请求的,所以实现AIDL首先要保证线程安全。
- 创建.aidl文件,定义接口
- 在代码中实现接口,Android SDK会根据aidl文件,生成接口,接口内部有一个名为Stub内部抽象类,这个类用于继承了Binder类并实现aidl文件中定义的接口,我们需要拓展Stub类并实现里面的抽象方法
- 复写Service的
onBind()
,返回Stub类的实现
3.1 创建.aidl文件
在Android Studio中工程目录下,反键new -> AIDL -> AIDL FIle
,可以新建aidl文件,编译器会自动在app(壳工程)/src/main/
目录下新建aidl文件,同时也会新建文件夹,默认以工程包名作为aidl文件所在的目录。
目录结构如下:
图-1 aidl文件目录结构
以上是关于Android进程通信之Messenger&AIDL使用详解的主要内容,如果未能解决你的问题,请参考以下文章