前言:
AsyncChannel是android系统中的在两个Handler间用于消息传输的机制,这两个Handler可以处于同一个进程,
也可以不再同一个进程。主要用于和网络相关的跨进程通信,例如phone进程和systemserver的ConnectivityService服务,
wifi进程和systemserver的ConnectivityService服务等。
AsyncChannel有两种工作模式:
1、单项通道模式,在该模式下,客户端只能向服务端发起请求,服务端给出回应。
2、双向通道模式,在该模式下,客户端和服务端同时连接上AsyncChannel,客户端可以向服务端发送请求,服务端也
可以向客户端发送请求。
1单通道分析连接过程
单项通道一定有一个是客户端,有一个是服务端,并且客户端可以向服务端发送消息,但是服务端只能响应消息,不能向客户端发送消息。
并且客户端持有AsyncChannel对象,服务端没有。
创建并且连接通道需要4个步骤:
1、获取服务端的Messenger对象(通过服务端的handler对象构造);
2、创建本地的Handler对象;
3、创建AsyncChannel对象,然后调用connect()方法。
4、处理CMD_CHANNEL_HALF_CONNECTED消息。
AsyncChannel是一个很单纯的类,没有继承任何类,定义如下,
public class AsyncChannel {
构造方法如下,
public AsyncChannel() {
}
直接看connecte方法, 调用流程图如下,
Connect方法如下,
public void connect(Context srcContext, Handler srcHandler, Messenger dstMessenger) {
if (DBG) log("connect srcHandler to the dstMesseng