日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第8章6节MonkeyRunner启动运行过程-启动Monkey 2

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第8章6节MonkeyRunner启动运行过程-启动Monkey 2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有了以下的基本認知之后,我們就可以通過分析代碼來闡述Monkey是怎么在用戶調用MonkeyRunner.waitForConnection的方法引發的一系列調用過程中啟動起來的了,我們先看下MonkeyRunner的這個waitForConnection方法:

?

62???public?static?MonkeyDevice?waitForConnection(PyObject[]?args,?String[]?kws)??

63???{??

64?????ArgParser?ap?=?JythonUtils.createArgParser(args,?kws);??

65?????Preconditions.checkNotNull(ap);??

66?????long?timeoutMs;??

67?????try??

68?????{??

69???????double?timeoutInSecs?=?JythonUtils.getFloat(ap,?0);??

70???????timeoutMs?=?(timeoutInSecs?*?1000.0D);??

71?????}?catch?(PyException?e)?{??

72???????timeoutMs?=?Long.MAX_VALUE;??

73?????}??

74???

75?????IChimpDevice?device?=?chimpchat.waitForConnection(timeoutMs,?ap.getString(1,?".*"));??

76???

77?????MonkeyDevice?chimpDevice?=?new?MonkeyDevice(device);??

78?????return?chimpDevice;??

79???}??

代碼8-6-1 MonkeyRunner - waitForConnection

?

腳本調用到的MonkeyRunner,MonkeyDevice等這些類都是通過JAVA來編寫的,而腳本自身卻是通過jython(可以被調用JAVA的python)編寫的,所以它們之前的參數需要有一個轉換的機制,至于它們是怎么轉換的不是重點,所以我自己都沒有去研究過jython的實現原理,因為這不影響我對MonkeyRunner框架的理解。好,我們繼續對上面代碼的分析:

  • 75行: 調用chimpchat對象的waitForConnection方法來獲得一個AdbChimpDevice的高層抽象設備實例

  • 79-78行: 將上面的AdbChimpDevice實例作為參數傳入到MonkeyDevice來構造一個MonkeDevice對象并返回給測試代碼,這樣測試代碼就可以通過操作該MonkeyDevice實例來控制目標設備了

我們重點往下分析ChimpChat的waitForConnection方法,至于MonkeyDevice構造函數,我們在下一章會對整個MonkeyDevice的運行原理進行一個詳盡的分析,所以這里就不重復了。

?

?89???public?IChimpDevice?waitForConnection(long?timeoutMs,?String?deviceId)??

90???{??

91?????return?this.mBackend.waitForConnection(timeoutMs,?deviceId);??

92???}??

98???public?IChimpDevice?waitForConnection()??

99???{??

100?????return?this.mBackend.waitForConnection(2147483647L,?".*");??

101???}??

代碼8-6-2 ChimpChat - waitForConnection

?

?

ChimpChat提供了兩個waitForConnection方法,其中一個是不帶參數的,相當于用戶在腳本直接調用MonkeyDevice.waitForConnection();另外一個是帶參數long類型超時和設備序列號的。無論是哪個方法ChimpChat都是很簡單只有一行,調用的是mBackend的waitForConnection,只是如果用戶沒有提供參數的話,ChimpChat會默認初始化超時和設備序列號這兩個參數,其中設備序列號會被初始化為一個正則表達式”.*”,代表任意一個首先找到的設備。這里的mBackend就是前面分析“啟動AndroidDebugBridge”的過程中實例化的AdbBackend對象,所以我們要定位到該類的waitForConnection方法。

?

116???public?IChimpDevice?waitForConnection(long?timeoutMs,?String?deviceIdRegex)??

117???{??

118?????do?{??

119???????IDevice?device?=?findAttachedDevice(deviceIdRegex);??

120???

121???????if?((device?!=?null)?&&?(device.getState()?==?IDevice.DeviceState.ONLINE))?{??

122?????????IChimpDevice?chimpDevice?=???

new?AdbChimpDevice(device);??

123?????????this.devices.add(chimpDevice);??

124?????????return?chimpDevice;??

125???????}??

126???????try??

127???????{??

128?????????Thread.sleep(200L);??

129???????}?catch?(InterruptedException?e)?{??

130?????????LOG.log(Level.SEVERE,?"Error?sleeping",?e);??

131???????}??

132???????timeoutMs?-=?200L;??

133?????}?while?(timeoutMs?>?0L);??

134??????

135???

136?????return?null;??

137???}??

代碼8-6-3 AdbBackend - waitForConnection


轉載于:https://blog.51cto.com/10988776/1732916

總結

以上是生活随笔為你收集整理的第8章6节MonkeyRunner启动运行过程-启动Monkey 2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。