注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Allen小笔记

有时会忘记努力...

 
 
 

日志

 
 

Android Monkey(二)  

2009-12-30 17:44:02|  分类: Android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

                                              Android Monkey Automation Test 源代码阅读 架构 Architecture

这次我们来讲一下,MonkeySourceNetwork.java.
这个类相对较大,里面有许多的内嵌类.(ps. 我不是写Java出身的,看到内嵌类就不符合我的审美习惯)
1.有一个MonkeyCommand的类,这是一个interface. *Command都是他的子类.
其中定义了一个很重要的方法:这个方法将string 类型的command转换为MonkeyEvent对象,并放入
commandQueue.
MonkeyCommandReturn translateCommand(List<String> command, CommandQueue queue);
好了,首先MonkeyCommandReturn又是一个类,是命令执行成功还是失败的一个类.
commandQueue是实际上是一个interface,然后它的实现是在CommandQueueImpl这个类中.
实现了如下的方法:
public void enqueueEvent(MonkeyEvent e) {
queuedEvents.offer(e);
}
将Event放入queueEvents队列中.而queueEvents是这样定义的:
private final Queue<MonkeyEvent> queuedEvents = new LinkedList<MonkeyEvent>();
无非就是一个LinkedList而已拉.
2.下面我在来说说MonkeySourceNetwork类中的方法:
private void translateCommand(String commandLine)
和上面的方法同名.实际上这个translateCommand是上面的封装.我们来RTFS:
List<String> parts = commandLineSplit(commandLine);
if (parts.size() > 0) {
MonkeyCommand command = COMMAND_MAP.get(parts.get(0));
if (command != null) {
MonkeyCommandReturn ret = command.translateCommand(parts,commandQueue);
COMMAND_MAP这是个什么东西呢?
private static final Map<String, MonkeyCommand> COMMAND_MAP = new HashMap<String, MonkeyCommand>();
看了没,是一个Map.以Command string作为Key, MonkeyCommand作为Value.这样的话,就建立了,
输入的命令和Command的关系。
static {
// Add in all the commands we support
COMMAND_MAP.put("flip", new FlipCommand());
COMMAND_MAP.put("touch", new TouchCommand());
COMMAND_MAP.put("trackball", new TrackballCommand());
COMMAND_MAP.put("key", new KeyCommand());
COMMAND_MAP.put("sleep", new SleepCommand());
COMMAND_MAP.put("wake", new WakeCommand());
COMMAND_MAP.put("tap", new TapCommand());
COMMAND_MAP.put("press", new PressCommand());
COMMAND_MAP.put("type", new TypeCommand());
COMMAND_MAP.put("listvar", new MonkeySourceNetworkVars.ListVarCommand());
COMMAND_MAP.put("getvar", new MonkeySourceNetworkVars.GetVarCommand());
}
但也不是所有的命令都放入COMMAND_MAP中.quit 和 done 就是例外,原因也很简单,没必要放进Map.
 再来分析下这条语句:MonkeyCommandReturn ret = command.translateCommand(parts,commandQueue);
首先,command已经是MonkeyCommand的sub class了.so 调用translateCommand将会表现出不同的行为.
例如,command假设为PressCommand.则translateCommand的表现为:
queue.enqueueEvent(new MonkeyKeyEvent(....))
每一个MonkeyEvent又都代表了一些对AP GUI错作.所以,也就是把操作放入了Queue.
okay.就这么多了.才不多这次就说这么多吧.我再附上我的手绘图,希望有帮助.Android Monkey(二) - 一切的阅读都是误读 - Allen小笔记Android Monkey(二) - 一切的阅读都是误读 - Allen小笔记
  评论这张
 
阅读(2756)| 评论(5)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017