第6章5节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-事件
来源:互联网 发布:语音广告合成软件 编辑:程序博客网 时间:2024/06/05 23:46
从网络过来的命令字串需要解析翻译出来,有些命令会在翻译好后直接执行然后返回,但有一大部分命令在翻译后需要转换成对应的事件,然后放入到命令队列里面等待执行。Monkey在取出一个事件执行的时候主要是执行其injectEvent方法来注入事件,而注入事件根据是否需要往系统注入事件分为两种:
- 需要通过系统服务往系统注入事件:如MonkeyKeyEvent事件会通过系统的InputManager往系统窗口注入按键事件来完成输入请求
- 不需要通过系统服务往系统注入事件: 如MonkeyWaitEvent只是进行简单的睡眠等待
MonkeyEvent是所有Monkey事件的总称,其实它包含了多种事件,我们先看下类图:
图6-5-1 MonkeyEvent类族谱
大家可以看到MonkeyEvent是一个抽象类,它最重要的地方是定义了injectEvent这个抽象方法。然后有一系列的子类继承该抽象类来实现其injectEvent接口,也就是去实现如何往系统注入事件来完成MonkeyRunner的请求了。所以如果这里要给Monkey事件做一个定义,我认为可以这样定义:Monkey事件是一个实现了injectEvent方法来处理不同的命令请求的类。但这里我们要注意并不是所有从MonkeyRunner过来的命令字串都会生成对应的事件的,请看下表:
命令字串
命令翻译类
目标事件类
MR是否支持
注释
touch down x y
TouchCommand
MonkeyTouchEvent
是
x代表x坐标,y代表y坐标
touch up x y
TouchCommand
MonkeyTouchEvent
是
同上
touch move x y
TouchCommand
MonkeyTouchEvent
是
同上
tap x y
TapCommand
MonkeyTouchEvent
是
同上
press name
PressCommand
MonkeyKeyEvent
是
Name代表按键名,如"MENU", "HOME", "SEARCH"等
key down name
KeyCommand
MonkeyKeyEvent
是
同上
key up name
KeyCommand
MonkeyKeyEvent
是
同上
getvar name
GetVarCommand
N/A(不会有对应事件,所以也不会加入事件队列,而是直接取得属性返回)
是
name 代表属性名
listvar
ListViewsCommand
同上
是
type line
TypeCommand
MonkeyKeyEvent
是
line 代表输入字串
wake
WakeCommand
N/A(不会有对应事件,所以也不会加入事件队列,而是直接PowerManager唤醒屏幕)
是
listViews
ListViewsCommand
N/A(不会生成事件也不会入事件队列)
是
queryview
QueryViewCommand
N/A(不会生成事件也不会入事件队列)
是
getRootView
GetRootViewCommand
N/A(不会生成事件也不会入事件队列)
是
getViewWithText
GetViewsWithTextCommand
N/A(不会生成事件也不会入事件队列)
是
done
N/A
N/A(不会生成事件也不会入事件队列)
是
测试完成,Monkey收到命令后会停止Socket监听
quit
N/A
N/A(不会生成事件也不会入事件队列)
是
测试请求退出,Monkey收到后不会停止Socket监听,
flip open
MonkeyFlipEvent
MonkeyFlipEvent
否
MonkeyRunner不支持发送这两个命令
flip close
MonkeyFlipEvent
MonkeyFlipEvent
否
trackball dx dy
否
deferredReturn
DeferReturnCommand
N/A(不会生成事件也不会入事件队列)
否
这个命令比较特别,做的事情是等待一个命令完成然后执行另外一个命令。但是在MonkeyRunner框架中并没有支持。
注: MR代表MonkeyRunner
表6-5-1 命令字串 – 命令翻译类 – 事件关系参照表
从列表中我们可以看到MonkeySourceNetwork支持大部分从MonkeyRunner过来的命令字串,但是只有2种是会生成对应的事件并存放到事件队列里面的,这两种事件都是需要对界面进行操作的,而其他如获得系统属性以及获得界面控件等命令都是不会生成对应事件,也不会进入到事件队列,而是直接处理然后返回的。这里我们对这2种事件做相应的描述:
- MonkeyTouchEvent:对界面进行触屏操作,最终会通过InputManager往系统注入对应事件
- MonkeyKeyEvent: 往界面输入键值,最终会通过InputManager往系统注入对应事件
这里要注意的是,其实并不是所有的事件注入都需要真的往系统窗口注入事件的,这个接口方法的名字我觉得Google 工程师起得不好,比如叫做handleEvent就不会造成混乱了(个人见解)。
注:更多文章请关注公众号:techgogogo或个人博客http://techgogogo.com。当然,也非常欢迎您直接微信(zhubaitian1)勾搭。本文由天地会珠海分舵原创。转载请自觉,是否投诉维权看心情。
- 第6章1节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览
- 第6章5节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-事件
- 第6章7节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-注入按键事件实例
- 第6章6节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令队列
- 第6章2节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-获取命令字串
- 第6章3节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令翻译类
- 第6章4节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-翻译命令字串
- 第6章8节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-小结
- 第5章6节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 初始化事件源(原创)
- 第5章7节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 循环获取并执行事件 - runMonkeyCycles(原创)
- 第5章2节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 启动流程概览(原创)
- 第5章1节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 官方简介(原创)
- 第5章3节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 启动脚本(原创)
- 第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用(原创)
- 第5章4节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 命令行参数解析(原创)
- Monkey源码分析之事件源
- Monkey源码分析之事件源
- 第8章6节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动Monkey
- 经典冒泡排序法
- CodeForces 601B Lipshitz Sequence (单调队列)
- 找第二大的数
- ubuntu kylin 15.10 防火墙 和 mysql不能远程访问的解决方法
- C/C++ 基础
- 第6章5节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-事件
- ISSC、红果蓝牙设备日志分析
- 安装Python 包自动安装工具 easy_install 和pip
- elasticsearch2.0学习之路(一)es在linux中的安装和集群配置
- 第6章6节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令队列
- C语言程序设计整理(2)
- 4.3.4 磁盘组织与管理
- sublime 调用 shell
- 第6章7节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-注入按键事件实例