StateMachine有自己单独的工作线程,
protected StateMachine(String name) {
mSmThread = new HandlerThread(name);
mSmThread.start();
Looper looper = mSmThread.getLooper();
initStateMachine(name, looper);
}
StateMachine中一个很重要的角色就是SmHandler,SmHandler在构造伊始就添加了两个状态:
private SmHandler(Looper looper, StateMachine sm) {
super(looper);
mSm = sm;
addState(mHaltingState, null);
addState(mQuittingState, null);
}
这两个状态意思是整个状态机的停止状态和退出状态,如下:
/**
* State entered when transitionToHaltingState is called.
*/
private class HaltingState extends State {
@Override
public boolean processMessage(Message msg) {
mSm.haltedProcessMessage(msg);
return true;
}
}
/**
* State entered when a valid quit message is handled.
*/
private class QuittingState extends State {
@Override
public boolean processMessage(Message msg) {
return NOT_HANDLED;
}
}
可见这两个状态都是继承自State,这个状态机中的状态都是用State表示的,如下:
public class State implements IState {
protected State() {
}
@Override
public void enter() {
}
@Override
public void exit() {
}
@Override
public boolean processMessage(Message msg) {
return false;
}
@Override
public String getName() {
String name = getClass().getName();
int lastDollar = name.lastIndexOf('$');
return name.substring(lastDollar + 1);
}
}
看起来很简单,主要就三个函数,enter表示进入状态的回调,exit表示离开状态的回调,processMessage表示收到消息的回调。
再来看State是如何添加到状态机中的,如下: