AIDL通信的简单实现

AIDL通信的简单实现

方法一:

1.服务端

1)在src/main目录下新建一个aidl文件夹,

2)然后在aidl目录下新建一个同java目录下包名相同的包,

3)在其中创建“.java”文件和每个“.java”对应的“.aidl”文件。每个“.aidl”文件只需按如下形式写即可:

// Book.aidl

package a.aidltest.aidltestservice;

parcelable Book;//parcelable需要小写


4)除此之外,还需要定义一个“.aidl”文件,其中声明一些用到的方法。

备注:

除了基本数据类型、String、CharSequence、List、Map、Parcelable、AIDL等数据类型外,其他自定义的Parcelable和AIDL对象必须要显示import进来;

5)实现服务端Service,实现定义好的AIDL接口;(实现该Service的时候它自动生成在src/main/java目录的包下,aidl目录下的“.java”和“.aidl”文件移植到客户端时可不用管它,不影响AIDL通信的实现)

6)配置服务端的Service的intent-filter属性中action、category属性,供客户端绑定服务使用;

 

 

 

2.客户端

1)将服务端的aidl目录移植到客户端的src/main目录下;

2)实现客户端绑定远程服务的代码,并返回Binder对象转换成AIDL接口;

 

方法二:

在一个App中模拟进程间通信的情景:

在方法一中实现服务端1)-- 5)步骤、实现客户端2)步骤的基础上进行如下操作即可:

1)给服务端Service进行android:process属性设置,给Service单独开启一个进程;

2)Intent对象如下创建即可:

Intent intent = new Intent(context,远程服务名.class);

 

3:注意

1)当aidl目录下“.java”文件时,build可能后出现aidl目录下的“.java”文件找不到的情况,这时需在app的build.gradle目录下进行如下设置即可解决:

 

android {

    …

    sourceSets{

        main{

                java.srcDirs = ['src/main/java','src/main/aidl']

              }

     }

}

你可能感兴趣的:(Android进阶探索)