private State mDestState;
private SmHandler(Looper looper, StateMachine sm) {
super(looper);
mSm = sm;
// 默认将HaltingState和QuittingState加入状态机
addState(mHaltingState, null);
addState(mQuittingState, null);
}
}
QuittingState
/**
- State entered when a valid quit message is handled.
*/
private class QuittingState extends State {
@Override
public boolean processMessage(Message msg) {
// 所有消息都不作处理
return NOT_HANDLED;
}
}
HaltingState
/**
- State entered when transitionToHaltingState is called.
*/
private class HaltingState extends State {
@Override
public boolean processMessage(Message msg) {
// 和quitting的不同在于,可以处理消息,所有的消息都调用haltedProcessMessage
mSm.haltedProcessMessage(msg);
return true;
}
}
StateMachine#start
public void start() {
// mSmHandler有可能为空,如果调用了quit,会被置空。如果调用了quit,statemachine的很多资源会被释放,调用start无法再次开启
if (mSmHandler == null) return;
// 初始化一些参数
mSmHandler.completeConstruction();
}
private final void completeConstruction() {
// 获取整个状态表的深度
int maxDepth = 0;
for (StateInfo si : mStateInfo.values()) {
int depth = 0;
for (StateInfo i = si; i != null; depth++) {
i = i.parentStateInfo;
}
if

本文深入解析了StateMachine的实现,包括 QuittingState 和 HaltingState 的处理,以及start方法、消息处理流程和状态转移。通过示例展示了如何在移动开发中使用StateMachine,并提供了学习资源。
最低0.47元/天 解锁文章
608

被折叠的 条评论
为什么被折叠?



