上一小节我们描写叙述了HierarchyViewer是怎样组建ADB协议命令来实现ViewServer的port转发的。在port转发设置好后,下一个要做的事情就是去检測目标设备端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)勾搭。本文由天地会珠海分舵原创。转载请自觉,是否投诉维权看心情。

最新文章

  1. 防御性编程习惯:求出链表中倒数第 m 个结点的值及其思想的总结
  2. JSP内置对象---request 对象
  3. Qt Load and Save PCL/PLY 加载和保存点云
  4. UVM中的class--2
  5. Zabbix配置文件详解之服务端zabbix_server
  6. <转载> 优秀程序员必备的23条好习惯
  7. 027. asp.net中数据绑定控件之 GridView控件
  8. diamond专题(三)—— diamond架构
  9. LoadRunner基础入门教程
  10. cocos2d-x 3.0rc2 对于每个包执行情况的重要平台 (超级方便)
  11. Filter 知识总结
  12. 搭建自己的BT下载平台服务器
  13. 让div显示在屏幕中央的css代码段
  14. FreeBSD上构架Nginx服务器
  15. vue Echarts 柱状图点击事件
  16. 阿里微服务架构下分布式事务解决方案-GTS
  17. 使用python和selenium写一个百度搜索的case
  18. PHP预防跨站脚本(XSS)攻击且不影响html代码显示效果
  19. 《深入理解java虚拟机》第六章 类文件结构
  20. rabbitmq级联之shovel插件和exchange.bind

热门文章

  1. Eclipse中使用Maven创建Web时错误
  2. Data_Structure01-绪论作业!
  3. xmlhelper类
  4. 埃及分数问题_迭代加深搜索_C++
  5. yii2 ftp 的常规操作 上传 下载
  6. js 抽奖小案例
  7. hihocoder Arithmetic Expression【在线查询】
  8. 树链剖分【p3038】[USACO11DEC]牧草种植Grass Planting
  9. 树链剖分【p1505】[国家集训队]旅游
  10. Context3D的setProgramConstantsFromMatrix使用时需注意的事项