前言
关于使用AIDL实现两个APP(跨进程)通信,我们通常把两个APP分别叫做服务端和客户端。本文不讲原理,只给最简易的案例。
一、服务端APP实现
1. 在src/main/aidl目录下新建一个.aidl文件,然后在.aidl文件中定义需要开放的接口,如下:
package com.test.aidl;
import com.test.aidl.ActionCallback;
interface OpenData {
void cycleData(String linData);
boolean handshake(int cmdNumber);
void listenerData(ActionCallback actionCallback);
}
package com.test.aidl;
interface ActionCallback {
void callback(String jsonData);
}
2. 点击工具栏Bulid模块中的Make Project时,会在build目录下生成编译文件,如下所示:
值得注意的是,编译出来的文件中,默认增加了一个stub内部类,这个stub类是Binder的子类,如下所示:
3.定义一个Service,然后把上一步的Stub类实例化,把Stub的对象return给Service的onBind方法,如下所示:
package com.test.server;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
import com.test.aidl.ActionCallback;
import com.test.aidl.OpenData;
public class ListenerService extends Service {
private static final int NOTIFICATION_ID = 1;
private final OpenData.Stub binder = new OpenData.Stub() {
@Override
public void cycleData(String linData) throws RemoteException {
Log.e("MyAidlData", "------------------cycleData---------------------");
Log.e("MyAidlData", "Data=" + linData);
}
@Override
public boolean handshake(int cmdNumber) throws RemoteException {
Log.e("MyAidlData", "------------------handshake---------------------");
Log.e("MyAidlData", "Data=" + cmdNumber)