第14章5节: HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态 2

关键代码是上面的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的运行状态了!


你可能感兴趣的:(软件测试开发)