StateMachine使用及源码解读,看完这篇彻底明白了

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值