Android 状态机stateMachine的应用

本文探讨了Android源码中广泛使用的状态机概念,特别是在蓝牙、WiFi和事件处理模块中的应用。以WiFi状态机为例,从Default状态开始,详细解析了状态机的运行流程,包括enter、processMessage和exit方法的执行。StateMachine内部使用HandlerThread和SmHandler来管理消息处理,并通过StateInfo维护状态间的转换。特别指出,当Message被当前State处理后,会传递给其parentState,直到没有更多的parentState,Message处理结束。最后,以WifiStateMachine为例,展示了复杂状态转换路径的设计智慧。
摘要由CSDN通过智能技术生成

研究Android源码发现很多状态机的应用,比如蓝牙,WiFi,事件处理等处,这些模块对于流程的要求很高,WiFi的连接到断开经历了一系列的操作


        addState(mDefaultState);
            addState(mInitialState, mDefaultState);
            addState(mSupplicantStartingState, mDefaultState);
            addState(mSupplicantStartedState, mDefaultState);
                addState(mDriverStartingState, mSupplicantStartedState);
                addState(mDriverStartedState, mSupplicantStartedState);
                    addState(mScanModeState, mDriverStartedState);
                    addState(mConnectModeState, mDriverStartedState);
                        addState(mL2ConnectedState, mConnectModeState);
                            addState(mObtainingIpState, mL2ConnectedState);
                            addState(mConnectedState, mL2ConnectedState);
                            addState(mRoamingState, mL2ConnectedState);
                        addState(mDisconnectingState, mConnectModeState);
                        addState(mDisconnectedState, mConnectModeState);
                        addState(mWpsRunningState, mConnectModeState);
                addState(mWaitForP2pDisableState, mSupplicantStartedState);
                addState(mDriverStoppingState, mSupplicantStartedState);
                addState(mDriverStoppedState, mSupplicantStartedState);
            addState(mSupplicantStoppingState, mDefaultState);
            addState(mSoftApState, mDefaultState);
WifiStateMachine源码里面关于WiFi状态的处理就是树状的,分层状态机,处理各种state的转化

如上图所示,WifistateMachine状态是从Default状态开始的,它的子state里面有InitialState,我们从最简单的状态分析StateMachine的运行情况。

public class State implements IState {

    /**
     * Constructor
     */
    protected State() {
    }

    /* (non-Javadoc)
     * @see com.android.internal.util.IState#enter()
     */
    @Override
    public void enter() {
    }

    /* (non-Javadoc)
     * @see com.android.internal.util.IState#exit()
     */
    @Override
    public void exit() {
    }

    /* (non-Javadoc)
     * @see com.android.internal.util.IState#processMessage(android.os.Message)
     */
    @Override
    public boolean processMessage(Message msg) {
        return false;
    }

    /**
     * Name of State for debugging purposes.
     *
     * This default implementation returns the class name, returning
     * the instance name would better in cases where a State class
     * is used for multiple states. But normally there is one class per
     * state and the class name is sufficient and easy to get. You may
     * want to provide a setName or some other mechanism for setting
     * another name if the class name is not
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值