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成员变量中。

  • 相关阅读:
    PHP基础学习笔记(一)
    安装wampserver之后,浏览器中输入localhost页面显示IIS7解决办法
    HTML5常识总结(一)
    AngularJs中的服务
    AngularJs中的directives(指令part1)
    Happy Number——LeetCode
    Binary Tree Zigzag Level Order Traversal——LeetCode
    Construct Binary Tree from Preorder and Inorder Traversal——LeetCode
    Construct Binary Tree from Inorder and Postorder Traversal——LeetCode
    Convert Sorted Array to Binary Search Tree——LeetCode
  • 原文地址:https://www.cnblogs.com/poptest/p/5092325.html
Copyright © 2011-2022 走看看