第5章7节《MonkeyRunner源码剖析》Monkey原理分析

天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写《深入理解 MonkeyRunner》书籍“。但因为诸多原因,没有如愿。所以这里把草稿分享出来,所以错误在所难免。有需要的就参考下吧,转发的话还请保留每篇文章结尾的出处等信息。

Monkey启动之后需要在整个MonkeyRunner的测试生命周期中提供服务,也就是说,一旦我们调用monkeyrunner命令来执行指定的测试脚本的时候,只要monkeyrunner还没有退出,那么Monkey就会一直提供服务,一直监听获取并处理从MonkeyRunner测试脚本发送过来的相应的命令。那么要实现这种一直监听的处理我们很自然就想到需要用一个循环来处理了。其实Monkey也不例外,我们往下会分析它是怎么通过一个循环来从事件源获取一个命令事件,然后调用该事件的注入方法进行事件注入的。当然,因为我们现在还没有分析学习到事件和事件源,所以本小节你只会看到Monkey是怎么通过它们提供的接口方法来获取事件和注入事件的,在下一章你就会看到整个事件究竟是怎么处理的了。

下面我们继续分析Monkey的run方法调用的最后一个重要方法,runMonkeyCycles。

代码5-7-1 Monkey – run调用runMonkeyCycles

425/** 426* Run the command! 427* 428* @param args The command-line arguments 429* @return Returns a posix-style result code. 0 for no error. 430*/ (String[] args) { 440mCount = 1000;… { 550crashedAtCycle = runMonkeyCycles(); 551}…}

当事件源初始化好后run方法就会去调用runMonkeyCycles方法不断的从命令队列中读取事件来执行。

代码5-7-2 Monkey – runMonkeyCycles

915/** 916* Run mCount cycles and see if we hit any crashers. 917* <p> 918* TODO: Meta state on keys 919* 920* @return Returns the last cycle which executed. If the value == mCount, no 921*errors detected. 922*/ () { 924int eventCounter = 0; 925int cycleCounter = 0;…(!systemCrashed && cycleCounter < mCount) {…1012MonkeyEvent ev = mEventSource.getNextEvent();1013if (ev != null) {1014int injectCode = ev.injectEvent(mWm,mAm, mVerbose);…(!(ev instanceof MonkeyThrottleEvent)) {1036eventCounter++;1037if (mCountEvents) {1038cycleCounter++;1039}1040}}…}

这段代码做的主要事情就是通过931行的一个while循环去不停调用事件源提供的方法getNextEvent来获得一个事件,然后调用事件的injectEvent方法来注入事件,比如注入按键事件来模拟用户按下某个按键。往下我们对这段代码做相应的分析:

——— 未完待续———

作者:天地会珠海分舵 微信公众号:TechGoGoGo 微博: CSDN:

,可以有一个人陪着你,也可以你一个人,总之那一刻,

第5章7节《MonkeyRunner源码剖析》Monkey原理分析

相关文章:

你感兴趣的文章:

标签云: