文章http://blog.csdn.net/shizhonghuo19870328/article/details/53192870 介绍了怎样用aidl 来实现跨进程通信。
但是此种架构只能实现从客户端到服务端的传递。 没有服务端向客户端传递的功能。
并且直接在服务端实现aidl interface, 不利于程序解耦。
下面介绍一种实现进程件双向通信的方法。
有两个模块, 模块VoiceService 和XCVoiceService。 XCVoiceService 是服务端,VoiceService是客户端。
一 客户端调用服务端的方法
1. VoiceService 新建一个 aild 文件 IVoiceService.aidl。
interface IVoiceService {
boolean isConnected();
boolean attachTextObserver(int pid, in ITextObserver observer);
}
2. 在XCVoiceService 中实现此接口。 并向ServiceManager 中注册。
public class VoiceConnector extends IVoiceService.Stub
在服务端向ServiceManager注册voiceConnector的Binder 对象。
public class VoiceService extends Service {
private VoiceConnector mBinder;
public void onCreate() {
super.onCreate();
mBinder = VoiceConnector.getInstance(this);
ServiceManagerHelper.addService(ContextHelper.ECARX_VOICE_SERVICE, mBinder);
}
}
public static void addService(String name, IBinder service) {
ServiceManager.addService(name, service, false);
}