首页 > Android, System > Android源码阅读笔记:AsyncChannel与层次状态机StateMachine

Android源码阅读笔记:AsyncChannel与层次状态机StateMachine

2012-03-13 18:32 星期二    浏览: 7,387    绿 发表评论 阅读评论

public void connect(Context srcContext, Handler srcHandler, String dstPackageName, String dstClassName) 函数connect:将一个handler连接到目的包/类上。 定义一个Runnable的子类ConnectAsync,并创建其实例,然后启动一个线程,在该线程的run函数中,运行connectSrcHandlerToPackageSync和replyHalfConnected。亦即:connect函数将对上述两个函数的调用放在另一个线程中去执行。 在connectSrcHandlerToPackageSync中会创建一个ServiceConnection实例,然后使用binderService绑定到目的package/class上。当连接上后,ServiceConnection的子类的onServiceConnected被调用。

Messenger用来处理别的进程送来的msg,处理msg的handler是创建它时作为构造函数传递进来的,亦即:可以使用一个Handler来创建Messenger,用于处理别的进程传递过来的msg。

SyncMessenger作为一个辅助类,包含了一个线程HandlerThread 的实例mHandlerThread、处理msg的类SyncHandler(Handler的子类)的实例mHandler、接收msg的Messenger实例mMessenger。也就是说,发送给Messenger的消息msg将由SyncHandler来处理,这个处理过程运行在线程HandlerThread中。可以使用SyncMessenger的静态函数obtain来获取一个SyncMessenger实例。

同步发送机制:调用者利用SyncMessenger的成员sendMessageSynchronously将要发送的消息msg送往目的进程(通过dstMessenger),由dstMessenger的handler进行处理,然后该函数等待(见行780: sm.mHandler.mLockObject.wait(););当对方处理完毕后,要向msg.replyTo(SyncMessenger中的mMessenger)回送消息,这时由SyncHandler的handleMessage来处理该回复消息,它将唤醒(见行734: mLockObject.notify();)在发送消息等待中的sendMessageSynchronously。从目的进程返回的msg结果在SyncHandler的handleMessage中拷贝给SyncHandler的mResultMsg,然后由sendMessageSynchronously返回给调用者。

private static Message sendMessageSynchronously(Messenger dstMessenger, Message msg) DataConnection继承自状态机StateMachine。

StateMachine是一个层次状态机(hierarchical state machine):一个状态可以有多个子状态的状态机。状态机中的状态须继承基类State,并实现成员函数processMessage,从而对收到的Message进行处理;其它可选实现的成员函数为enter()、exit()和getName()。函数enter和exit相当于面向对象编程里的“状态”的构造和析构函数。函数getName用于返回状态的名称,多用于调试目的。

状态机有多少子状态,可在构建状态机时,使用addState(State state, State parent)来添加所有的子状态,构建出一个层次状态关系。初始状态可由setInitialState函数指定。 使用者应调用StateMachine的start函数让状态机进入工作状态:初始化状态堆栈,调用初始状态(包括其父状态)的enter函数等。

在DataConnection中定义了下面几个状态: 初始状态设置为DcInactiveState

本文链接地址: http://blog.redwolf-soft.com/?p=1021

原创文章,版权©红狼博客所有, 转载随意,但请注明出处。

    分享到:

相关文章:

  • 无相关文章
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
订阅评论
  欢迎参与讨论,请在这里发表您的看法、交流您的观点。