Cts框架解析(19)-设备状态的分类以及恢复模式的分类
设备状态
类图
枚举 : TestDeviceState,其实是adb中DeviceState扩展而来。
1.FASTBOOT:线刷状态(根据fastboot监听器获得经过设置)
2.ONLINE:在线状态(根据DeviceState值转化而来)
3.OFFLINE:离线状态(根据DeviceState值转化而来)
4.RECOVERY:卡刷状态(根据DeviceState值转化而来)
5.NOT_AVAILABLE:不可用状态(根据情况不同手动设置)
枚举:RecoveryMode,恢复模式。在进行设备恢复的时候,会先判断该设备的恢复模式。
1.NONE:该设备不进行设备恢复
2.ONLINE:该设备需要恢复到online状态
3.AVAILABLE:该设备需要恢复到可用状态
理解
1.最需要理解是TestDeviceState.NOT_AVAILABLE状态:
一般情况下用adb devices没有获得该设备的任何状态,但是程序知道设备肯定是存在的。这个时候就可以判断该设备是处于NOT_AVAILABLE状态。
2.TestDeviceState.OFFLINE的状态和TestDeviceState.NOT_AVAILABLE的区别:
OFFLINE是离线状态,但是这种离线adb devices是可以检测到的,这个时候设备是有反馈的。
但是NOT_AVAILABLE是adb devices无法得到的,这个时候压根就不理睬你。
比如QQ中的离线提醒和下线的区别,大家一下子就明白了。离线状态好比TestDeviceState.OFFLINE,有时候可能会给你恢复,提示该用户暂时不在线。
下线就好比TestDeviceState.NOT_AVAILABLE。
3.TestDeviceState.ONLINE和RecoveryMode.ONLINE区别:
TestDeviceState.ONLINE是一种状态的分类,而RecoveryMode.ONLINE是在设备离线后,设备恢复要达到的一种目标的分类。当设备处于TestDeviceState.OFFLINE的时候或者TestDeviceState.NOT_AVAILABLE的时候,它就要调用ITestRecovery来恢复设备,那么RecoveryMode就定义了,该设备恢复的目标。ITestRecovery中的方法执行的时候,会先判断要恢复到什么状态。然后才会做相应的工作。
代码
TestDeviceState
public enum TestDeviceState {FASTBOOT,ONLINE,OFFLINE,RECOVERY,NOT_AVAILABLE;/*** Converts from {@link TestDeviceState} to {@link DeviceState}* @return the {@link DeviceState} or <code>null</code>*/DeviceState getDdmsState() {switch (this) {case ONLINE:return DeviceState.ONLINE;case OFFLINE:return DeviceState.OFFLINE;case RECOVERY:return DeviceState.RECOVERY;default:return null;}}/*** Returns the {@link TestDeviceState} corresponding to the {@link DeviceState}.*/static TestDeviceState getStateByDdms(DeviceState ddmsState) {if (ddmsState == null) {return TestDeviceState.NOT_AVAILABLE;}switch (ddmsState) {case ONLINE:return TestDeviceState.ONLINE;case OFFLINE:return TestDeviceState.OFFLINE;case RECOVERY:return TestDeviceState.RECOVERY;}return TestDeviceState.NOT_AVAILABLE;}
}
RecoveryMode
public enum RecoveryMode {/** don't attempt to recover device. */NONE,/** recover device to online state only */ONLINE,/*** Recover device into fully testable state - framework is up, and external storage is* mounted.*/AVAILABLE}
重点理解
上面说了TestDeviceState.NOT_AVAILABLE很特殊,那么下面就来看看哪些场景下设备状态被设置成了NOT_AVAILABLE
1.DeviceManager.createTestDevice()
IManagedTestDevice createTestDevice(IDevice allocatedDevice, IDeviceStateMonitor monitor) {IManagedTestDevice testDevice = new TestDevice(allocatedDevice, monitor);testDevice.setFastbootEnabled(mFastbootEnabled);if (allocatedDevice instanceof FastbootDevice) {testDevice.setDeviceState(TestDeviceState.FASTBOOT);} else if (allocatedDevice instanceof StubDevice) {testDevice.setDeviceState(TestDeviceState.NOT_AVAILABLE);}return testDevice;}
当设备属于虚拟设备的时候,也设置该设备为NOT_AVAILABLE状态。
2.DeviceManager的私有类ManagedDeviceListener.deviceDisconnected()
public void deviceDisconnected(IDevice disconnectedDevice) {if (mAvailableDeviceQueue.remove(disconnectedDevice)) {CLog.i("Removed disconnected device %s from available queue", disconnectedDevice.getSerialNumber());}IManagedTestDevice testDevice = mAllocatedDeviceMap.get(disconnectedDevice.getSerialNumber());if (testDevice != null) {testDevice.setDeviceState(TestDeviceState.NOT_AVAILABLE);} else if (mCheckDeviceMap.containsKey(disconnectedDevice.getSerialNumber())) {IDeviceStateMonitor monitor = mCheckDeviceMap.get(disconnectedDevice.getSerialNumber());monitor.setState(TestDeviceState.NOT_AVAILABLE);}updateDeviceMonitor();}
当adb监听到有设备断线的时候,会判断该设备是否处于已分配或者已检测的设备列表中,则设置其状态为NOT_AVAILABLE。
3.DeviceManager的私有类FastbootMonitor.run()
synchronized (mAllocatedDeviceMap) {for (IManagedTestDevice testDevice : mAllocatedDeviceMap.values()) {if (!serials.contains(testDevice.getSerialNumber()) && testDevice.getDeviceState().equals(TestDeviceState.FASTBOOT)) {testDevice.setDeviceState(TestDeviceState.NOT_AVAILABLE);}}}
当处于已分配(就是正在执行任务)的任务列表中的设备被检测出来处于fastboot状态,这个时候就要将设备状态设置成NOT_AVAILABLE。
所以说,NOT_AVAILABLE对于处于执行任务的设备来说,比较重要的一种状态。
Cts框架解析(19)-设备状态的分类以及恢复模式的分类相关推荐
- 爱思助手刷机中断,无法退出恢复模式的解决方案(越狱出现卡在“等待苹果设备连接到开机模式”提示)
问题 博主高中时用的一款iPhone4到现在依然没有寿终正寝,开机键坏了,随着ios系统的不断更新,很多软件也无法下载,我时长在午夜听到小机机的呐喊:我觉得我还可以抢救一下!于是拆了机,把关机键卸了下 ...
- 电力设备状态检修信息管理系统--开篇 电力设备检修分类【文摘】
电力设备检修分类:故障检修.计划检修.状态检修. 早期的检修方式为故障检修,也称故障后检修,其主要是对功能失效的设备或设备部件进行维护.修理或更换,检修工作在故障发生后才进行.由于故障的不可预期性,设 ...
- RT-Thread | UART设备驱动框架解析
1024G 嵌入式资源大放送!包括但不限于C/C++.单片机.Linux等.关注微信公众号[嵌入式大杂烩],回复1024,即可免费获取! UART简介 STM32 芯片具有多个 USART 外设用于串 ...
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(六)
AlexeyAB DarkNet YOLOv3框架解析与应用实践(六) Tiny Darknet 听过很多人谈论SqueezeNet. SqueezeNet很酷,但它只是优化参数计数.当大多数高质量的 ...
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(三)
AlexeyAB DarkNet YOLOv3框架解析与应用实践(三) ImageNet分类 您可以使用Darknet为1000级ImageNet挑战赛分类图像.如果你还没有安装Darknet,你应该 ...
- 反欺诈技术揭秘-设备指纹VS关系网络模型 此博文包含图片 (2017-05-12 10:23:52)转载▼ 标签: 设备指纹 关系网络 反欺诈 神经网络模型 分类: 风控 文章来源:网络(经整合梳理
反欺诈技术揭秘-设备指纹VS关系网络模型 (2017-05-12 10:23:52) 转载▼ 标签: 设备指纹 关系网络 反欺诈 神经网络模型 分类: 风控 文章来源:网络(经整合梳理,仅供交流学习使 ...
- Ethermint部署及框架解析
Ethermint是什么 Ethermint is a blazing fast Proof-of-Stake blockchain that is fully compatible with Eth ...
- IBM p系列小型机日常维护及故障排除时常用命令(检查IBM设备状态汇总)
1. 确认所在主机及系统版本 通过#hostname.#oslevel确认所在主机后,再进行后续操作 2.运行lsdev 命令配置各种参数,所列各种设备状态都应为Available. #lsdev – ...
- IOT-OS之RT-Thread(七)--- I/O设备模型框架与PIN设备对象管理
文章目录 一.I/O设备模型 1.1 I/O设备模型框架 1.2 I/O设备对象描述 1.3 I/O设备对象接口函数 二.PIN设备管理示例 2.1 PIN设备驱动框架层 2.2 PIN设备驱动层 2 ...
- android 1.0框架,KOOM V1.0.5 框架解析
快手在2020年中旬开源了一个线上OOM监控上报的框架:KOOM,这里简单研究下. 一.官方项目介绍 1.1 描述: KOOM是快手性能优化团队在处理移动端OOM问题的过程中沉淀出的一套完整解决方案. ...
最新文章
- 辰星计划 2021 | 璀璨起航,旷视春季实习生招募开启
- python 开发版-Micropython开发板固件烧写教程
- PS滤镜制作下雨照片特效
- IOS 程序插件及功能动态更新思路┊
- CentOS7虚拟机之间设置免密登录
- C++基于多态实现依赖颠倒原则附源码
- boost::fibers::launch::dispatch的测试程序
- 开发环境很重要,需要学习如何自己搭建开发环境
- thinkphp-session与cookie
- 速成pytorch学习——8天损失函数
- (9)数据结构-双端队列
- 餐厅扫码点餐系统源码 外卖订餐小程序源码
- 系列3—BabeLua常用技巧
- win10 AD15 安装步骤
- 联想G460驱动问题
- socket程序退出后端口依然被占用问题的解决
- 电脑可以联网但是有的网页打不开
- C++:应用有限差分法求解 稳平流扩散方程 v*ux-k*uxx=0 in 一个空间维度,具有恒定的速度 v 和扩散系数 k(附完整源码)
- 完整正则表达式语法列表
- iOS AFNetworking简介
热门文章
- big类型和double类型
- ng : 无法加载文件 C:\Users\AppData\Roaming\npm\ng.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.mi crosoft.c
- 解决谷歌浏览器翻译不能用问题
- 小米怎么和计算机连接网络连接网络,小米电视如何与电脑连接
- codeforces 1260 总结
- 【React】react-redux 案例
- 论文阅读——Don‘t Stop Pretraining: Adapt Language Models to Domains and Tasks
- 什么是数据库存储过程?
- 感性负载与容性负载的区别
- iphone 文件夹连接服务器 百度云,iPhone与电脑共享文件夹