zoukankan      html  css  js  c++  java
  • 老李推荐:第8章6节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动Monkey 3

    往下我们先重点分析119行findAttachedDevice是如何根据设备序列号找到目标Device对象的,然后再去分析AdbChimpDevice是如何构造起来的。我们先进入到findAttachedDevice方法中:

     

    99   private IDevice findAttachedDevice(String deviceIdRegex)  

    100   {  

    101     Pattern pattern = Pattern.compile(deviceIdRegex);  

    102     for (IDevice device : this.bridge.getDevices()) {  

    103       String serialNumber = device.getSerialNumber();  

    104       if (pattern.matcher(serialNumber).matches()) {  

    105         return device;  

    106       }  

    107     }  

    108     return null;  

    109   }  

    代码8-6-4 AdbBackend - findAttachedDevice

    在第3节分析“启动AndroidDebugBridge”的过程中我们已经学习了AdbBackend在初始化AndroidDebugBridge对象后会将该实例保存到自身的bridge成员对象里面,所以这个方法做的事情就是通过这个AndroidDebugBridge实例去获得所有最新的Device设备列表(102行),然后比对每个Device设备的序列号和参数提供的时候吻合,如果是的话就返回(103-105行)。

    我们先看下是怎么获得设备列表的:

    482   public IDevice[] getDevices()  

    483   {  

    484     synchronized (sLock) {  

    485       if (this.mDeviceMonitor != null) {  

    486         return this.mDeviceMonitor.getDevices();  

    487       }  

    488     }  

    489   

    490     return new IDevice[0];  

    491   }  

    代码8-6-5 AdbBackend - getDevices

    AndroidDebugBridge对象起启动DeviceMonitor设备监控线程对象后会将该对象保存起来到mDeviceMonitor成员变量里面,这些我们在前面都学习过了。这里AndroidDebugBridge的getDevices方法就是去DeviceMonitor对象中调用其getDevices方法来获取最新的设备列表的:

     

    129   Device[] getDevices()  

    130   {  

    131     synchronized (this.mDevices) {  

    132       return (Device[])this.mDevices.toArray(new   

    Device[this.mDevices.size()]);  

    133     }  

    134   }  

    代码8-6-6 DeviceMonitor - getDevices

    在第4节“启动设备监控线程DeviceMonitor”中我们已经学习了当DeviceMonitor在往ADB服务器发送监控命令“host:track-devices”后,一旦监控到有设备新增加或者移除或者状态变化等,就会将设备的改动更新保存到mDevices这个Device列表里面。以上方法返回的就是这一整个列表。

    代码8-6-4 AdbBackend - findAttachedDevice中,findAttachedDevice在获得这个设备列表后,会取出每个设备的序列号来和目标设备序列号进行对比查找直接找到吻合的设备才返回,那么我们看下其对应的获取序列号的方法device.getSerialNumber():

     

    244   public String getSerialNumber()  

    245   {  

    246     return this.mSerialNumber;  

    247   }  

    代码8-6-7 Device - getSerialNumber

    直接返回的就是Device设备保存的mSerialNumber变量,这个变量就是代表了对应设备的序列号。大家应该还记得第4节”启动设备监控线程DeviceMonitor”中分析到“processIncomingDeviceData”方法时,一旦ADB服务器将最新的设备列表发送过来的时候就会取出每个设备的序列号和设备状态来初始化Device设备来把该设备的序列号,设备状态保存到该Device设备对应的mSerialNumber和mStat成员变量中。

  • 相关阅读:
    怎么在sublime里面显示编码格式
    鸟哥的Linux私房菜——第十七章:Linux 账号与身份管理
    反复
    鸟哥的Linux私房菜——第十六章:学习Shell Scripts
    鸟哥的Linux私房菜——第十五章:正规表示法
    鸟哥的Linux私房菜——第十四章:Bash Shell
    鸟哥的Linux私房菜——第十三章:Vim编译器
    Expression Blend实例中文教程(10)
    Expression Blend实例中文教程(9)
    Expression Blend实例中文教程(8)
  • 原文地址:https://www.cnblogs.com/poptest/p/5092325.html
Copyright © 2011-2022 走看看