第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态
来源:互联网 发布:淘宝做代理赚钱吗 编辑:程序博客网 时间:2024/06/05 01:20
上一小节我们描述了HierarchyViewer是如何组建ADB协议命令来实现ViewServer的端口转发的,在端口转发设置好后,下一个要做的事情就是去检测目标设备端ViewServer线程是否已经启动起来了。我们进入setupViewServer调用的DeviceBridge的isViewServerRunning方法:
165 public static boolean isViewServerRunning(IDevice device) {166 final boolean[] result = new boolean[1];167 try {168 if (device.isOnline()) {169 device.executeShellCommand(buildIsServerRunningShellCommand(),170 new BooleanResultReader(result));171 if (!result[0]) {172 ViewServerInfo serverInfo = loadViewServerInfo(device);173 if (serverInfo != null && serverInfo.protocolVersion > 2) {174 result[0] = true;175 }176 }177 }178 } catch (TimeoutException e) { ...187 }188 return result[0];189 }代码14-5-1 DeviceBridge - isViewServerRunning
关键代码是上面的169行,通过Device类的实例来往ADB服务器发送相应的命令来检测ViewServer是否已经在运行。
device.executeShellCommand在前面章节已经分析过了,就是用来发送”adb shell”命令的。
我们看下buildIsServerRunningShellCommand方法,看这个命令是如何组织起来的:
235 private static String buildIsServerRunningShellCommand() {236 return String.format("service call window %d", SERVICE_CODE_IS_SERVER_RUNNING); 237 }代码14-5-2 DeviceBridge - buildIsServerRunningShellCommand
而全局变量 SERVICE_CODE_IS_SERVER_RUNNING 的定义是:
48 private static final int DEFAULT_SERVER_PORT = 4939; 49 // These codes must match the auto-generated codes in IWindowManager.java 50 // See IWindowManager.aidl as well 51 private static final int SERVICE_CODE_START_SERVER = 1; 52 private static final int SERVICE_CODE_STOP_SERVER = 2; 53 private static final int SERVICE_CODE_IS_SERVER_RUNNING = 3;代码14-5-3 DeviceBridge - 全局变量示例
236行整出来的这一串不就是”service call window 3”嘛。所以结合device.sendShellCommand,事实上就是往设备发送了命令”adb shell service call window 3”,上一章我们才用它来查询ViewServer的运行状态了!
注:更多文章请关注公众号:techgogogo或个人博客http://techgogogo.com。当然,也非常欢迎您直接微信(zhubaitian1)勾搭。本文由天地会珠海分舵原创。转载请自觉,是否投诉维权看心情。
0 0
- 第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态
- 第14章6节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-启动ViewServer
- 第14章4节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-端口转发
- 第14章7节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-获取版本号
- 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述
- 第14章3节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer实例化
- 第14章9节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-遍历控件树查找控件
- 第14章1节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-面向控件编程VS面向坐标编程
- 第14章8节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-获取控件列表并建立控件树
- ViewServer接受hierarchyviewer的命令
- 第5章1节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 官方简介(原创)
- 第5章3节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 启动脚本(原创)
- 第8章5节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行测试脚本
- ViewServer源码分析
- 第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用(原创)
- 第5章2节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 启动流程概览(原创)
- 第5章4节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 命令行参数解析(原创)
- 第5章6节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 初始化事件源(原创)
- Evaluate Reverse Polish Notation
- Android学习笔记(4):资源字典R.java
- 第14章3节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer实例化
- (八十二)if语句
- 第14章4节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-端口转发
- 第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态
- (八十三)逻辑表达式
- 第14章6节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-启动ViewServer
- [转载]pandoc ~.md->pdf
- 第14章7节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-获取版本号
- tomcat catalina.out 文件过大,进行切割查看
- NOSQL数据库简介
- iOS — 内存分配与分区
- 第14章8节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-获取控件列表并建立控件树