Android Monkey Automation Test 源代码阅读 架构 Architecture
这次我们来讲一下,MonkeySourceNetwork.java.
这个类相对较大,里面有许多的内嵌类.(ps. 我不是写Java出身的,看到内嵌类就不符合我的审美习惯)
将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);
看了没,是一个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.
首先,command已经是MonkeyCommand的sub class了.so 调用translateCommand将会表现出不同的行为.
例如,command假设为PressCommand.则translateCommand的表现为:
queue.enqueueEvent(new MonkeyKeyEvent(....))
每一个MonkeyEvent又都代表了一些对AP GUI错作.所以,也就是把操作放入了Queue.
okay.就这么多了.才不多这次就说这么多吧.我再附上我的手绘图,希望有帮助.
这次我们来讲一下,MonkeySourceNetwork.java.
这个类相对较大,里面有许多的内嵌类.(ps. 我不是写Java出身的,看到内嵌类就不符合我的审美习惯)
将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);
看了没,是一个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.
首先,command已经是MonkeyCommand的sub class了.so 调用translateCommand将会表现出不同的行为.
例如,command假设为PressCommand.则translateCommand的表现为:
queue.enqueueEvent(new MonkeyKeyEvent(....))
每一个MonkeyEvent又都代表了一些对AP GUI错作.所以,也就是把操作放入了Queue.
okay.就这么多了.才不多这次就说这么多吧.我再附上我的手绘图,希望有帮助.
![Android Monkey(二) - 一切的阅读都是误读 - Allen小笔记](http://img96.ph.126.net/ju_sGPuoj_sSpeyFlXV7cQ==/721138890334196897.jpg)
![Android Monkey(二) - 一切的阅读都是误读 - Allen小笔记](http://img609.ph.126.net/m8g3WhT8XhECxiUmZV9aNg==/1901363467682218798.jpg)