分类: LINUX
2012-03-09 17:07:08
3. HierarchicalStateMachine是一个机器,这个机器是含有状态的机器,
机器的每个状态都可以有父状态,如果当前状态需要父状态作处理, 那么让该状态的processMessage返回false
4. 当前状态和它的父状态们放在mStateStack数组中, active是用来记录StateInfo包含的state是否是active,在后面计算当前状态和目标状态的共同父状态 过程中使用。
所有状态和状态的StateInfo的键值对存放在HashMap mStateInfo中。
/** The map of all of the states in the state machine */
private HashMap
new HashMap
/** Stack used to manage the current hierarchy of states */
private StateInfo mStateStack[ ] ;
5. 转换状态:performTransitions()
a. 寻找当前状态和目标状态的共同父状态,从目标状态开始循环查询父状态的active是否是true,如果是active,说明是当前状态和目标状态的父状态,并依次放入数组mTempStateStack中。
b. 从当前状态到共同父状态(不包括本身)依次调用exit,并将active设置为false,将mStateStackTopIndex设置成mStateStack数组的个数。
c. 反序将mTempStateStack中的元素拷贝到mStateStack中,并重新设置mStateStackTopIndex,并返回第一个需要调用enter的state的 index startingIndex
d. 从共同父状态到目标状态依次调用enter
e. 移动ArrayLiist mDeferredMessages中的deffered message, 从尾部开始将message加入到MessageQueue中的第一个,这样,最先加入mDeferredMessages中的Message第一个得到 执行。并且deffered message比普通Message先执行。
原文地址:http://blog.csdn.net/xiaoxiaosunzhao/article/details/6407827