天天看点

android中AIDL进程间通讯(Activity--service)

为了实现进程间通信,尤其是在涉及多进程并发情况下的进程间通信。因为多个进程是不共享一片内存区域,所以不能实现数据共享。

通过activity进行操作service中的数据是可以做到,包括向service中传递数据,和从service中获取数据。但是在service中操作activity不能直接做到,可以考虑广播。

步骤:

1.创建aidl的接口,并且定义两个进程之间通讯的方法。一般用于activity和Service之间的通讯。

android中AIDL进程间通讯(Activity--service)

2.在编写aidl文件时,如果是创建自定义的类,需要在接口方法中指明数据流通的方向,如果方向不正确的话,是不能获取数据的。

android中AIDL进程间通讯(Activity--service)

3.对于自定义的Bean 一定要保证在java包下和aidl包下的结构完全一致。并且为parcelable XXX的形式

android中AIDL进程间通讯(Activity--service)

4.点击build ,进行生成aidl的文件,然后创建相应的service.然后生成aidl的IBinder对象

android中AIDL进程间通讯(Activity--service)

5.在activity中建立service的连接 并且获取到aidl的对象,根据对象进行操作数据,进行数据的传递

android中AIDL进程间通讯(Activity--service)

6.进行数据的交互

android中AIDL进程间通讯(Activity--service)

7.在功能清单中进行配置进程

android中AIDL进程间通讯(Activity--service)

demo:https://github.com/yunzheyue/aidlTest

问题:

1.aidl和java中的bean的包名要保持一致

2.in out inout 方向表示数据传递的方向

3.自定义的bean类生成的parceble对象的时候,需要添加方法

public void readFromParcel(Parcel in) {

name = in.readString();

age = in.readInt();

}

as的代码模板默认没有添加