老李推荐: 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge

上一节我们看到在启动AndroidDebugBridge的过程中会调用其start方法,而该方法会做2个主要的事情:

  1. 715行startAdb:开启AndroidDebugBridge

  2. 722-723行:初始化android设备监控并启动DeviceMonitor设备监控线程。

其中第一点我们上一小节已经做了详尽分析了,那么我们往下就去分析下第2点。

DeviceMonitor主要的功能就是监控是否有安卓设备拔除或者连接上来,然后对每个连接上来的设备的所有可调式进程进行监控。这个功能更多是给DDMS这个调试工具使用的,大家从AndroidDebugBridge所在的jar包ddmlib.jar应该就能猜到其实DDMS用到的也是这个jar包。

Android的每一个应用程序都是运行在独立的进程中的,且每个进程都是在自己的虚拟机(VM)中运行的,其实这个就基本上是Android操作系统的沙箱(SandBox)的概念了。目的就是以防你的进程到处乱闯搞破坏。每个进程的VM都会提供唯一的一个端口作连接调试器用。DDMS启动时会连接到AndroidDebugBridge(也就是ADB服务器了)。当一个设备被连接时,一个虚拟机在设备上启动或停止时它会通知DDMS,在DDMS和adb之间创建一个虚拟机的监控服务。一旦虚拟机运行,DDMS会通过AndroidDebugBridge的DeviceMonitor线程检索虚拟机的进程ID(pid),并通过设备上的adb守护进程打开一个连接到虚拟机的调试器。这样DDMS就能和虚拟机对话了。

 

图8-4-1 DDMS界面

DeviceMonitor这个类对于MonkeyRunner框架来说最重要的功能是它保存了一个代表所有连接上来的设备的Device列表,这个Device类非常的重要,基本可以说MonkeyRunner和ADB服务器的沟通最终都是通过它来做的,所以它相当于一个安卓设备在PC端的代理,我们下一章会对这个类做详细的分析。下面我们先看下DeviceMonitor这个类:

 

图8-4-2 DeviceMonitor类