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());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值