RERAN:安卓系统的定时和点击的录制和回放——(2)

2. Android 输入

  本节中,我们将介绍Android应用不同类型的输入,以及它们是如何以事件的形式展示给用户看。

A. 用户触摸屏操作

  智能手机应用程序的区别有部分是用户通过触摸屏进行的操作引起的不同表现。我们简要描述几个常见的:

  按下-释放(点击):主要的输入是简单的按压,也就是用户轻敲屏幕并快速的放开,例如:点击一个按钮或点击屏幕上的键盘进行输入文本
  按下-保持(按住):按住是由用户点击屏幕上的一个区域,然后在同一个位置保持一定的时间。这个动作可以用来访问二级菜单或隐藏的选项。
  滑动:滑动的操作是用户按下屏幕,然后保持住,一直从位置(x1,y1)移动到一个新的位置(x2,y2),最后放开。很多应用都有用到滑动这个操作。例如在Web浏览器页面滚动文本,或者在愤怒的小鸟游戏中,打小鸟。
  双指缩放:多点触控手势包括通过多个接触点,按压触摸屏,如使用2个或2个以上手指。最常见的多点触控用法是放大和缩小。一般一些应用程序如果支持这种手势的话,他们通常会用于改变当前查看内容的放大级别。例如在谷歌地图中,用于使用放大或缩小来改变查看地图详情的级别。
  上面列出的四个用户操作,有三个被认为是手势:按住、滑动、双指缩放。简单的来说,手势需要一大群潜在的触屏事件来实现他们的感知功能。如第七节中描述,用户点击的操作需要事件的集群则比较少,目前已经可以使用一些方法进行成功的回放。如图1所示,应用程序运行中,频繁的使用触摸屏手势;这些结果是基于同一个用户玩一款应用软件5分钟来统计的。从中可以观察到:这个会话期间,大多数的应用(86个应用中有60个)已经涉及了20到100个手势。只有2个应用是不包含任何的手势(免费的Uno小游戏和手电筒)。
  除了触摸屏,用户可以通过手机上的物理按键提供输入。我们的测试设备没有物理键盘,但它们有几个不同用途的按钮,如锁屏,关机、调节音量大小等。

B.物理传感器

  Android设备通常有若干个传感器,用于产生异步输入。传感器数据产生是硬件检测到手机物理属性的变化。我们将描述Android应用程序中最常见的传感器及其用途。需要注意的是,GPS定位是一个服务,而不是直接从设备的传感器读取的,所以目前我们无法回放它的事件。
  加速度传感器允许应用程序来检测手机是否已经改变了它的速度,还可以用来检测手机是否倾斜和旋转。这是用来改变屏幕从纵向布局为横向布局的机制,同时一些游戏使用这个加速度传感器作为用户输入的主要手段。如通过左右滚动球过迷宫或者摇晃魔法八球( magic eight ball:一种游戏)。
  近距离传感器或光传感器允许应用程序检测用户与电话间的距离。这个传感器主要用于通话过程中,当屏幕变暗,用户靠近电话时,不小心按到其他的按钮。
  指南针指示手机相对于磁北的方向。指南针通常用于地图或导航应用程序,提供方向的角度。

C. Android事件

  Android 软件栈是由一个定制的Linux内核、库、Dalvik虚拟机(VM)和运行在虚拟机上的程序组成。当用户使用一个Android应用进行交互时,Android设备的传感器产生并发送事件到内核,并将信息存在dev/input/event* 目录中的设备文件中。这些记录的事件有一个标准,5个基层格式(时间戳:设备:类型代码值),其中时间戳表示最后一次系统重新启动后到现在经过的时间,设备是事件的命名(如event 4),剩下的字段取决于特定的事件类型。
  在上述格式中,触摸屏手势被编码作为触摸屏事件流,但并没有标记其要执行哪些动作。例如,一个这样的事件可能看起来如下:


40-719451: /dev/input/event4: 0003 0035 0000011f

  这里的时间戳显示事件产生是40秒,系统重启到事件生成的时间为719451微秒; 输入的设备相对于触摸屏(我们的设备)是event4。接下来的三列提供了位置信息:0035是事件对应的x位置和0000011f(十六进制)对应于屏幕的坐标287(十进制)。然而,对高级别的手势而言,不仅仅只有这样一个单一的信息量。例如,单次点击通常需要大约18个触摸屏事件,而滑动的操作大约需要50个触摸屏事件。


这里写图片描述
图2 滑动操作的一系列事件:Xi,Yi是初始坐标;Xm,Ym是移动的坐标(仍然按住移动);Xf,Yf是最后的坐标

  图2中显示了滑动这个典型手势所包含的一个子集事件。该图的左侧显示了54个事件的原始数据流,而右侧显示高等级的语义事件集群:点击、移动、释放。前面介绍的示例事件,实际上数据流中的事件3。注意上面的时间信息,为了能成功的回放滑动操作,这54个事件必须精确的回放在179毫秒内(时间戳范围是在40-719421到40-898681)。

  举个例子,多个传感器的真实应用程序上的事件流。在图三中,展示的是GasBuddy应用程序的事件流(这个程序是在地图上显示天然气的价格),显示的数据是app操作后正常运行的前80s。


这里写图片描述
图3 Gas Buddy中事件的时序图

  x轴显示的时间,以秒为单位,y轴显示事件的数量。该图表显示事件的颗粒度是5s:顶部红色曲线,标注了触摸屏事件,而底部的淡蓝色曲线则标注了指南针的事件。上面的文本则是描述不同的执行阶段。首先,用户使用触摸板输入地理位置:洛杉矶(0~10s);可以观察到,在这个阶段并不使用指南针。接下来,应用程序会加载洛杉矶附近的加油站地图,要使用指南针来定向地图,可以观察到,用户在等待时,没有触摸屏事件(11~25s)。在第三阶段,地图加载完成,用户可以使用缩小和放大地图进行导航,此时产生了大量的触摸屏事件(26~45s),指南针仍然用来保证正确地址的定位。第四阶段,用户浏览个别加油站的天然气价格(46~60s),这个只需要进行滚动,不需要指南针。最后(61+s),用户再次使用缩小放大地图进行导航,产生触摸屏和指南针事件。
  时间序列揭示了成功进行回放的几个关键要求:事件来自于所有的传感器,不仅仅是触摸屏,这些事件都必须被采集和传送,因为它们影响应用程序的行为,同时在在高吞吐量时,这些事件也必须被采集和传送。

App nameTouchscreenProximity sensorAccelerometer
Facebook61997016
Angry Birds58956753
Gasbuddy472327315
Amazon48317794

表1. 每个输入设备运行5分钟后产生的输入事件数

  我们提供了一个典型事件流总量的定量评估表1。表1展示的是来自三个不同的事件输入设备,所列出的应用程序在运行5分钟内产生的事件总数。其中触摸事件占主导地位,但也有相当数量的时间是来自传感器。在测试执行期间,上述的应用程序所在的手机都放置在桌子上用于保持平衡,这样的话就只会有少量的加速计的事件产生。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值