StateMachine学习

Posted 爱吃香蕉的猴子0000

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了StateMachine学习相关的知识,希望对你有一定的参考价值。

Hello, 大家好,我是爱吃香蕉的猴子,写一下 学习的StateMachine;


学习文章


StateMachine使用addState来构建一个StateMachine的树结构,另外通过setInitialState方法设置指定初始状态,之后通过start来启动该StateMachine,从根状态到初始状态路径下的的所有状态的enter方法首先得以执行;

消息处理:

  • 当前StateMachine初始化完成以后,通过obtainMessage和sendMessage获取和发送消息,收到消息以后,首先是当前所处状态的processMessage执行,以上例子,就是ms1,另外ms1也可以通过transitionTo切换到新的状态,
    需要注意的是,transitionTo并不能立刻切换到新状态
  • 如果当前的所处的状态机不能处理消息,则在processMessage方法返回false,此时由其父状态来处理
  • 通过transitionTo切换到新的状态机时候,沿着当前的状态机到需要切换到的目的状态机的共同父状态依次的exit方法,然后顺着共同父亲状态依次执行新的状态机的enter方法(需要注意的是,公共父状态的enter和exit方法不会执行)
  • 如果想要停止状态机,可以调用quit或者abort方法,从而进入QuittingState,并在下一次处理时,退出HandlerThread线程,清理内部各个对象。

例子:
增加源码:
core/java/com/android/internal/util/StateMachine.java
./core/java/com/android/internal/util/IState.java
./core/java/com/android/internal/util/State.java

class HelloWorld extends StateMachine {
    HelloWorld(String name) {
        super(name);
        addState(mState1);
        setInitialState(mState1);
    }

    public static HelloWorld makeHelloWorld() {
        HelloWorld hw = new HelloWorld("hw");
        hw.start();
        return hw;
    }

    class State1 extends State {

        public boolean processMessage(Message message) {
            log("Hello World");
            return HANDLED;
        }
    }

    State1 mState1 = new State1();
    void testHelloWorld() {
        HelloWorld hw = makeHelloWorld();
        hw.sendMessage(hw.obtainMessage());
    }
}

以上是关于StateMachine学习的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 2.x实战之StateMachine

mina statemachine解读

Spring Statemachine 概念及应用

Spring Statemachine 概念及应用

再次说说状态机之三-歪果仁的StateMachine

IOS开发-OC学习-常用功能代码片段整理