第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を準備し、次のセクションではこの方法を分析します.
注意:詳細は、公衆番号:techgogogogoまたは個人ブログに注目してください.http://techgogogo.com.もちろん、直接微信(zhubaitian 1)のお付き合いも大歓迎です.本文は天地会珠海分舵オリジナル.転載は自覚して、権利擁護をクレームするかどうかは気持ち次第です.