| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 【Android】StateMachine状态机的定义理解--安卓平台框架基础内部工具StateMachine.Java -> 正文阅读 |
|
[移动开发]【Android】StateMachine状态机的定义理解--安卓平台框架基础内部工具StateMachine.Java |
这里定义的状态机是处理消息的分层状态机并且可以按层次排列状态。 状态机是处理消息的分层状态机,并且可以按层次排列状态。 状态是一个State对象,实现--->processMessage()和可选的enter/exit/getName() getName()方法返回状态的名称--->默认实现返回类名--->让getName()返回状态实例名可能是可取的,特别是当一个特定的状态类有多个实例时。 在创建状态机时---addState()用于构建状态机层次结构---setInitialState()用于标识这些中的哪个是初始状态。 构造后程序员调用start()初始化并启动状态机。StateMachine()的第一个动作是为所有初始状态的层次结构调用enter()从其最年长的父级开始。进入的调用将在上下文中完成StateMachine()的处理程序,不在调用start()的上下文中,并且它们将在处理任何消息之前调用。例如,给定简单的下面的状态机,将调用 mP1.enter(),然后调用 mS1.enter()。最后,发送到状态机的消息会被当前状态处理; ? ? ? ? mp1
状态机中的每个状态可能有零个或一个父状态。如果子状态无法处理消息,它可能会处理消息由其父级返回 false 或 NOT_HANDLED。如果消息没有被处理子状态或其任何祖先,unhandledMessage()将被调用给状态机最后一次处理消息的机会。 ?当所有处理完成时,状态机可以选择调用transitionToHaltingState()。当当前processingMessage()返回状态机将转移到内部HaltingState()并调用halting()。国家随后收到的任何消息机器将导致haltedProcessMessage()被调用。 如果希望完全停止状态机调用quit()或quitNow()。这些将调用当前状态及其父状态的exit(),调用 onQuitting()然后退出线程/循环。 除了processMessage(),每个State()还有一个 enter()方法和exit()方法可以被覆盖。 由于状态以层次结构排列,因此过渡到新状态导致退出当前状态并进入新状态。确定要进入/退出最接近的公共父级的状态列表找到当前状态。然后我们退出当前状态及其parent 最多但不包括共同的父状态,然后输入所有公共父项下的新状态一直到目标状态。如果没有共同的父状态,则退出所有状态,然后是新状态已输入。 状态可以使用的另外两种方法是deferMessage()和sendMessageAtFrontOfQueue()。 sendMessageAtFrontOfQueue()发送一条消息,但将其放在队列的前面而不是后面。这deferMessage()使消息保存在列表中,直到转换到新状态。此时所有的延迟消息将与最旧的消息一起放在状态机队列的前面在前面。然后这些将在之前由新的当前状态处理队列中或稍后可能添加的任何其他消息。两者的这些是受保护的,只能从状态机中调用。 为了说明其中一些属性,我们将使用状态机具有8个状态层次结构的状态机:
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 16:54:30- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |