研究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 nam

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

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



