设备状态

类图

枚举 : 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)-设备状态的分类以及恢复模式的分类相关推荐

  1. 爱思助手刷机中断,无法退出恢复模式的解决方案(越狱出现卡在“等待苹果设备连接到开机模式”提示)

    问题 博主高中时用的一款iPhone4到现在依然没有寿终正寝,开机键坏了,随着ios系统的不断更新,很多软件也无法下载,我时长在午夜听到小机机的呐喊:我觉得我还可以抢救一下!于是拆了机,把关机键卸了下 ...

  2. 电力设备状态检修信息管理系统--开篇 电力设备检修分类【文摘】

    电力设备检修分类:故障检修.计划检修.状态检修. 早期的检修方式为故障检修,也称故障后检修,其主要是对功能失效的设备或设备部件进行维护.修理或更换,检修工作在故障发生后才进行.由于故障的不可预期性,设 ...

  3. RT-Thread | UART设备驱动框架解析

    1024G 嵌入式资源大放送!包括但不限于C/C++.单片机.Linux等.关注微信公众号[嵌入式大杂烩],回复1024,即可免费获取! UART简介 STM32 芯片具有多个 USART 外设用于串 ...

  4. AlexeyAB DarkNet YOLOv3框架解析与应用实践(六)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(六) Tiny Darknet 听过很多人谈论SqueezeNet. SqueezeNet很酷,但它只是优化参数计数.当大多数高质量的 ...

  5. AlexeyAB DarkNet YOLOv3框架解析与应用实践(三)

    AlexeyAB DarkNet YOLOv3框架解析与应用实践(三) ImageNet分类 您可以使用Darknet为1000级ImageNet挑战赛分类图像.如果你还没有安装Darknet,你应该 ...

  6. 反欺诈技术揭秘-设备指纹VS关系网络模型 此博文包含图片 (2017-05-12 10:23:52)转载▼ 标签: 设备指纹 关系网络 反欺诈 神经网络模型 分类: 风控 文章来源:网络(经整合梳理

    反欺诈技术揭秘-设备指纹VS关系网络模型 (2017-05-12 10:23:52) 转载▼ 标签: 设备指纹 关系网络 反欺诈 神经网络模型 分类: 风控 文章来源:网络(经整合梳理,仅供交流学习使 ...

  7. Ethermint部署及框架解析

    Ethermint是什么 Ethermint is a blazing fast Proof-of-Stake blockchain that is fully compatible with Eth ...

  8. IBM p系列小型机日常维护及故障排除时常用命令(检查IBM设备状态汇总)

    1. 确认所在主机及系统版本 通过#hostname.#oslevel确认所在主机后,再进行后续操作 2.运行lsdev 命令配置各种参数,所列各种设备状态都应为Available. #lsdev – ...

  9. 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 ...

  10. android 1.0框架,KOOM V1.0.5 框架解析

    快手在2020年中旬开源了一个线上OOM监控上报的框架:KOOM,这里简单研究下. 一.官方项目介绍 1.1 描述: KOOM是快手性能优化团队在处理移动端OOM问题的过程中沉淀出的一套完整解决方案. ...

最新文章

  1. 辰星计划 2021 | 璀璨起航,旷视春季实习生招募开启
  2. python 开发版-Micropython开发板固件烧写教程
  3. PS滤镜制作下雨照片特效
  4. IOS 程序插件及功能动态更新思路┊
  5. CentOS7虚拟机之间设置免密登录
  6. C++基于多态实现依赖颠倒原则附源码
  7. boost::fibers::launch::dispatch的测试程序
  8. 开发环境很重要,需要学习如何自己搭建开发环境
  9. thinkphp-session与cookie
  10. 速成pytorch学习——8天损失函数
  11. (9)数据结构-双端队列
  12. 餐厅扫码点餐系统源码 外卖订餐小程序源码
  13. 系列3—BabeLua常用技巧
  14. win10 AD15 安装步骤
  15. 联想G460驱动问题
  16. socket程序退出后端口依然被占用问题的解决
  17. 电脑可以联网但是有的网页打不开
  18. C++:应用有限差分法求解 稳平流扩散方程 v*ux-k*uxx=0 in 一个空间维度,具有恒定的速度 v 和扩散系数 k(附完整源码)
  19. 完整正则表达式语法列表
  20. iOS AFNetworking简介

热门文章

  1. big类型和double类型
  2. ng : 无法加载文件 C:\Users\AppData\Roaming\npm\ng.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.mi crosoft.c
  3. 解决谷歌浏览器翻译不能用问题
  4. 小米怎么和计算机连接网络连接网络,小米电视如何与电脑连接
  5. codeforces 1260 总结
  6. 【React】react-redux 案例
  7. 论文阅读——Don‘t Stop Pretraining: Adapt Language Models to Domains and Tasks
  8. 什么是数据库存储过程?
  9. 感性负载与容性负载的区别
  10. iphone 文件夹连接服务器 百度云,iPhone与电脑共享文件夹