Service的远程通信AIDL
先解释下什么是AIDL,AIDL (Android Interface Definition Language)是一种IDL 语言,用于生成可以在Android设备上两个进程之间进行进程间通信(IPC)的代码。如果在一个进程中(例如Activity)要调用另一个进程中(例如Service)对象的操作,就可以使用AIDL生成可序列化的参数。
AIDL IPC机制是面向接口的、轻量级的。通过AIDL定义的接口可以实现服务器端与客户端的IPC通信。
使用AIDL实现IPC(进程间通讯)
说明:
以下代码我用的是最新版的SDK,android6.0 api
创建.aidl文件
// IAppServiceRemoteBinder.aidl
package me.dengfengdecao.android.servicedemo;
// Declare any non-default types here with import statements
interface IAppServiceRemoteBinder {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
double aDouble, String aString);
void syncData(String data);
}
其中 syncData方法用来和客户端同步数据,测试用的。
实现AIDL接口
在RemoteService中的onBind方法中返回aidl接口中Stub内部抽象类的实现,这里使用了匿名对象:
@Override
public IBinder onBind(Intent intent) {
Log.d(TAG, "onBind");
return new IAppServiceRemoteBinder.Stub() {
@Override
public void basicTypes(int anInt, long aLong, boolean aBo