zoukankan      html  css  js  c++  java
  • 第14章3节《MonkeyRunner源代码剖析》 HierarchyViewer实现原理-HierarchyViewer实例化

      既然要使用HierarchyViewer来获取控件信息,那么首先我们看下在脚本中。我们是怎么获得HierarchyViewer的,看以下一段脚本代码:

    1	device = MonkeyRunner.waitForConnection()  
    2	device.wake()
    3	device.startActivity(component="com.example.android.notepad/com.example.android.notepad.NotesList")  
    4	viewer = device.getHierarchyViewer()
    5	view = viewer.findViewById("id/button")
    代码14-3-1 測试脚本获取HierarchyViewer演示样例

    从代码中我们能够看到其调用的是MonkeyDevice的getHierarchyViewer方法。跟踪进去:

     67     @MonkeyRunnerExported(doc = "Get the HierarchyViewer object for the device.",
     68             returns = "A HierarchyViewer object")
     69     public HierarchyViewer getHierarchyViewer(PyObject[] args, String[] kws) {
     70         return impl.getHierarchyViewer();
     71     }

    代码14-3-2 MonkeyDevice - getHierarchyViewer方法

    通过本书之前的分析,我们知道MonkeyDevice的成员变量impl其实就是AdbChimpDevice的一个实例,所以往下调用的是AdbChimpDevice的getHierarchyViewer方法:

     82     public HierarchyViewer getHierarchyViewer() {
     83         return new HierarchyViewer(device);
     84     }
    代码14-3-3 AdbChimpDevice的getHierarchyViewer方法

    AdbChimpDevice会直接调用HierarchyViewer的构造函数对HierarchyViewer进行实例化。

    实例化会传入AdbChimpDevice的成员变量device,那么这个device又是哪个类的实例呢?从前面的分析中我们知道。这其实是ddmlib库里面的Device这个类的实例,它基本的作用是调用AdbHelper来往ADBserver发送命令。

    好,我们继续看下HierarchyViwer的构造函数:

     30     /**
     31      * Constructs the hierarchy viewer for the specified device.
     32      *
     33      * @param device The Android device to connect to.
     34      */
     35     public HierarchyViewer(IDevice device) {
     36         this.mDevice = device;
     37         setupViewServer();
     38     }
    代码14-3-4 HierarchyViewer构造函数

    这里HierarchyViewer把ddmlib库的Device实例保存为自己的成员变量以便往后利用它来往ADB发送命令。然后会调用setupViewServer这个成员函数来把ViewServer准备好,下一小节我们会去分析下这种方法。

    注:很多其它文章请关注公众号:techgogogo或个人博客http://techgogogo.com。当然,也很欢迎您直接微信(zhubaitian1)勾搭。

    本文由天地会珠海分舵原创。

    转载请自觉,是否投诉维权看心情。


  • 相关阅读:
    查看线程
    shiro+多tomcat+redis实现session共享
    win11系统设置笔记本合盖上不休眠
    nvm切换node版本出现乱码 exit status 1:
    nvm安装vuecli
    SQL Server Management 2012 启动错误及解决:Cannot find one or more componets
    SQL Server 2012 连接 Oracle 11gR2 Database
    SQL Server 数据库跨区域时间问题
    SSIS 同步不同数据库的不同两张表
    Reporting Service 不能发送订阅报表的问题
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/6945306.html
Copyright © 2011-2022 走看看