Android 进程之间的通信有两种方式:1,messenger 方式 2,AIDL
messenger 在处理数据交互时由于是串行数据处理方式,所以当客户端的并发请求过多时,服务端的数据处理很容易堵塞。
所以此时需要用到AIDL。
下面说下AIDL方式使用时需要注意的事项:
AIDL中调用方式跟传递的数据类型为基本类型及ArrayList 列表、序列化对象、包括键值对的Map.
AIDL中序列化的对象要建一个与对之对应的AIDL文件,然后在里面引入包名及声明。
AIDL方式客户端可以使用观查者模式来接收服务端数据的变化,即在客户声明监听Listener 并注册到服端,当服务端检测到数据变化时回调注册的Listener.
AIDL方式当客户端不再监听时,需要告知服务端,服务端需要从需要通知的列表中删除此项监听。由于AIDL方式注册Listener时binder机制都会将其转化为一个新的对象,所以直接删除是找不到对象了的。为此我们在服端使用RemoteCallbackList<E extends IInterface>来保存客户端自己注册的listener,callback以键值对的方式来保存客户端注册的listener,当注销里,callback会自动帮我们完成对比并删除,减少我们的代码量。
AIDL中执行的方法如果比较耗时,客户端不就在UI线程中去调用,因为如果在UI结程中调用很容易产生ANR异常。同理当服务端也应该不去调用客户端比较耗时的方法。
AIDL断开重连的处理机制:
1,在OnServiceDisconnected方法中实现重连。
2,使用deathRecipient监听,deathRecipient机制:当服务端断开之后会向deathRecipient发送消息,此时收到消息后会处理服务重连。
AIDL为了保证安全性最好接收边接之前对于连接的来源进行权限控置操作。