IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: 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()。最后,发送到状态机的消息会被当前状态处理;
在我们下面的简单状态机中,最初是 mS1.processMessage()。

? ? ? ? mp1
? ? ? ? / ? ?\
? ? mS2 ?mS1 ---->初始状态


状态机创建并启动后,将消息发送到一个状态机器使用sendMessage()并且消息是使用创建的setMessage()。当状态机收到消息时,当前状态的processMessage()被调用。在上面的例子中mS1.processMessage()将首先被调用。状态可以使用transitionTo()将当前状态更改为新状态。

状态机中的每个状态可能有零个或一个父状态。如果子状态无法处理消息,它可能会处理消息由其父级返回 false 或 NOT_HANDLED。如果消息没有被处理子状态或其任何祖先,unhandledMessage()将被调用给状态机最后一次处理消息的机会。

?当所有处理完成时,状态机可以选择调用transitionToHaltingState()。当当前processingMessage()返回状态机将转移到内部HaltingState()并调用halting()。国家随后收到的任何消息机器将导致haltedProcessMessage()被调用。

如果希望完全停止状态机调用quit()或quitNow()。这些将调用当前状态及其父状态的exit(),调用 onQuitting()然后退出线程/循环。

除了processMessage(),每个State()还有一个 enter()方法和exit()方法可以被覆盖。

由于状态以层次结构排列,因此过渡到新状态导致退出当前状态并进入新状态。确定要进入/退出最接近的公共父级的状态列表找到当前状态。然后我们退出当前状态及其parent 最多但不包括共同的父状态,然后输入所有公共父项下的新状态一直到目标状态。如果没有共同的父状态,则退出所有状态,然后是新状态已输入。

状态可以使用的另外两种方法是deferMessage()和sendMessageAtFrontOfQueue()。 sendMessageAtFrontOfQueue()发送一条消息,但将其放在队列的前面而不是后面。这deferMessage()使消息保存在列表中,直到转换到新状态。此时所有的延迟消息将与最旧的消息一起放在状态机队列的前面在前面。然后这些将在之前由新的当前状态处理队列中或稍后可能添加的任何其他消息。两者的这些是受保护的,只能从状态机中调用。

为了说明其中一些属性,我们将使用状态机具有8个状态层次结构的状态机:
<前>
? ? ? ? ? ? ? ?分压
? ? ? ? ? ? ? / ? ? ?\
? ? ? ? ? ? mP1 mS0
? ? ? ? ? ?/ ? \
? ? ? 毫秒2 毫秒1
? ? ? / ?\ ? ? ? ?\
?mS3 ?mS4 ? mS5 --->初始状态


参考来源:platform_frameworks_base/StateMachine.java at master · aosp-mirror/platform_frameworks_base · GitHub

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-14 13:28:08  更:2021-09-14 13:29:36 
 
开发: 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-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码