偶尔看到StateMachine,这东西在Android中比较完美。
StateMachine是一个层次状态机(hierarchical state machine):一个状态可以有多个子状态的状态机。状态机中的状态须继承基类State,并实现成员函数processMessage,从而对收到的 Message进行处理;其它可选实现的成员函数为enter()、exit()和getName()。函数enter和exit相当于面向对象编程里的 “状态”的构造和析构函数。函数getName用于返回状态的名称,多用于调试目的。
状态机有多少子状态,可在构建状态机时,使用addState(State state, State parent)来添加所有的子状态,构建出一个层次状态关系。初始状态可由setInitialState函数指定。 使用者应调用StateMachine的start函数让状态机进入工作状态:初始化状态堆栈,调用初始状态(包括其父状态)的enter函数等。
摘自:http://www.redwolf-blog.com/?p=1021
1.找到一篇描述怎么使用状态机的文章,讲的很详细,还有例子代码:
应该是分析了StateMachine.java的注释之后翻译的,附件中放了这个类,以及State.java和IState.java
Android StateMachine分析
http://blog.csdn.net/lele_cheny/article/details/9289905
2.关于原理和源码分析请参考这篇文章:
Android学习 StateMachine与State模式
http://www.cnblogs.com/bastard/archive/2012/06/05/2536258.html
讲的很清晰,但是对于我来说,还不太明白使用的方式,以及内部存储的状态几点怎么就用map来完成了tree的存储呢?以后还得继续研究研究。
3.这篇文章讲述的不是很清晰,但是分析了源码过程比较仔细:
android状态机机制StateMachine
http://blog.csdn.net/myxmu/article/details/7917451
4.最后看到有本书里面讲述了这个内容:
深入理解Android:Telephony原理剖析与最佳实践
对应章节信息:
第8章 android手机上网实现机制 / 204
8.1 android网络整体结构 / 204
8.2 什么是dataconnection / 205
8.2.1 dataconnection类定义及子类 / 205
8.2.2 dataconnection类关键属性 / 206
8.2.3 dataconnection类的方法 / 207
8.2.4 5个数据连接对象的状态转换 / 207
8.3 statemachine状态机 / 208
8.3.1 state设计模式 / 209
8.3.2 statemachine核心类 / 209
8.3.3 statemachine运行机制 / 210
8.3.4 dataconnection使用state模式的运行机制 / 211
8.4 什么是apn / 212
好嘛,好久没买书了,又该去西单了,哈哈。