当前位置:首页 > 企业简介 >

第14章3节《MonkeyRunner源码剖析》 HierarchyViewer

发布时间:2017-09-11 14:11:26 作者:陕西誉丰源物资有限公司

第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来往ADB服务器发送命令。

好,我们继续看下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准备好,下一小节我们会去分析下这个方法。

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:十堰SEO http://shiyan.raoyu.net

  • 上一篇:探索大型网站技术架构(二)
  • 下一篇:最后一页