ipc进程间通信的使用场景(暴露接口)
只有当你允许来自不同的客户端访问你的服务并且需要处理多线程问题时你才必须使用AIDL
可见AIDL是处理多线程、多客户端并发访问的。而Messager是单线程处理。
0内涵诠释:
字面:粘合剂
Binder框架:
服务器接口(全局服务):binder对象
接受binder驱动的消息-》执行onTransact()函数》执行不同代码
客户端接口(任何程序):获得binder对象
获得Binder驱动,调用其transact()发送消息至服务器
Binder驱动:
Binder类的实例,客户端通过该对象访问远程服务。
服务端:(service(实现)、aidl(声明))
1.定义aidl文件
1.1定义接口aidl
1.2定义接口的方法
2创建服务service
2.1注册binder实例,并实现aidl的接口
(aidl的stub(桩)就是binder的实例)
3在manifest里注册相关服务
3客户端
主要通过ServiceConnected与服务端连接
mCalcAidl = ICalcAIDL.Stub.asInterface(service);
通过binder驱动发送消息
3.1绑定服务端的service
bindService(intent,serviceConn,int(Context.BIN_AUTO_CREATE))
3.2将binder对象转换为aidl接口
mCalcAidl(aidl的接口) = ICalcAIDL.Stub.asInterface((BInder对象)service);
(该方法在serviceconnection里面实现)
3.3调用aidl接口