AsyncChannel在Dctracker和dataconnection, NetworkFactory和ConnectivityService之间完成对应的通信,在数据业务中起到了非常重要的作用.
1.以Dctracker和dataconnection为例子:
Messenger.send(Message message)
/**
* ``Send a Message to this Messenger's Handler.// messager.send就是发送消息到对应的hander里面,在创建对应的messager的时候会传入相应的Handler.
* @param message The Message to send. Usually retrieved through
* {@link Message#obtain() Message.obtain()}.
* @throws RemoteException Throws DeadObjectException if the target
* Handler no longer exists.
*/
public void send(Message message) throws RemoteException {
mTarget.send(message);
}
创建AsyncChannel和建立full connection过程:
建立数据业务bringUp过程:
NetworkFactory的注册过程.
总结下:关于AsyncChannel的使用就是注册填充mSrcHandler,mSrcMessenger,mDstMessenger的过程.如果通过messenger.send发送消息就是发送到初始化messenger对象时填入的对应的Handler对象.
/** Handler for source */
private Handler mSrcHandler;
/** Messenger for source */
private Messenger mSrcMessenger;
/** Messenger for destination */
private Messenger mDstMessenger;