Android13 StatMachine removeState流程分析

这篇文章详细解释了StatMachine类中的removeState方法,它是如何从状态机中移除一个状态的,以及SmHandler类中如何通过HashMap管理和删除状态。特别关注了与StateInfo和parentStateInfo相关的逻辑处理。
摘要由CSDN通过智能技术生成

StatMachine的removeState方法用于从这个状态机中删除一个状态,代码如下:

//frameworks/base/core/java/com/android/internal/util/StateMachine.java
public class StateMachine {
    private SmHandler mSmHandler;
    public final void removeState(State state) {
        mSmHandler.removeState(state);
    }
}

调用SmHandler的removeState方法:

//frameworks/base/core/java/com/android/internal/util/StateMachine.java
public class StateMachine {
    private static class SmHandler extends Handler {
        /** The map of all of the states in the state machine */
        private HashMap<State, StateInfo> mStateInfo = new HashMap<State, StateInfo>();
        private void removeState(State state) {
            StateInfo stateInfo = mStateInfo.get(state); //通过mStateInfo取得state对应的stateInfo 
            if (stateInfo == null || stateInfo.active) {
                return;
            }
            // 判断是否是父简单,如果是直接返回
            boolean isParent = mStateInfo.values().stream()
                    .filter(si -> si.parentStateInfo == stateInfo)
                    .findAny()
                    .isPresent();
            if (isParent) {
                return;
            }
            mStateInfo.remove(state); //调用mStateInfo的remove方法删除state
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值