in 表示输入参数,即服务端可以修改该类型
out 表示输出参数,即客户端可以修改该类型,客户端不行
inout 表示客户端和服务端都可以修改该类型
如
void onSuccess(int code,in MusicInfo musicInfo);
有人可能会这样想,既然 inout 表示客户端和服务端都可以修改该类型,那我们平时在写 aidl 文件的时候,直接在方法参数前面加上 inout 修饰就 OK了,省得去区分。
这样做法当然不行,既然双方都可以修改,那系统的开销肯定会比较大。就好比管道一样。
说了这么多,接下来让我们一起来看一下例子 IEasyService.aidl
package xj.musicserver.easy;
// Declare any non-default types here with import statements
interface IEasyService {
/**
-
Demonstrates some basic types that you can use as parameters
-
and return values in AIDL.
*/
void connect(String mes);
void disConnect(String mes);
}
这个 aidl 文件很接口,只有两个方法,connect 和 disConnect 方法。
这里我们把 aidl 文跟 Java 文件中放在一起,需要在 build.gradle 中配置
sourceSets {
main {
jniLibs.srcDirs = [‘libs’]
aidl.srcDirs = [‘src/main/java’]
}
}
关于怎样在 AndroidStudio 中引用 aidl 文件的,可以参考我的这一篇文章 AndroidStudio 引用 aidl 文件的两种方法
编写一个 Service,实现接口,处理客户端的请求,并将接口返回回去
public class EasyService extends Service {
private static final String TAG = “EasyService”;
public EasyService() {
}
IEasyService.Stub mIBinder=new IEasyService.Stub() {
@Override
public void connect(String mes) throws RemoteException {
LogUtil.i(TAG,“connect: mes =” + mes);
}
@Override
public void disConnect(String mes) throws RemoteException {
LogUtil.i(TAG, “disConnect: mes =” +mes);
}