一种用于分析Android端应用运行流畅度的方法和系统与流程

文档序号:15327893发布日期:2018-09-04 19:30阅读:151来源:国知局

本发明涉及应用开发领域,具体涉及一种用于分析Android端应用运行流畅度的方法和一种用于分析Android端应用运行流畅度的系统。



背景技术:

随着科学技术的飞速发展,智能设备的普及,人们通过在智能设备上安装各种应用程序,便能进行娱乐和工作,极大地方便了人们的生活。

但当智能设备上安装的应用程序的增多,由于应用程序运行的不稳定性,经常出现应用程序反应缓慢、卡死和闪退的现象,特别是在安装Android操作系统的智能设备中,应用程序反应缓慢、卡死和闪退的现象极为常见。为保证应用程序运行的流畅性,开发人员在开发应用程序时,会对应用程序的运行流畅度进行测试,而当前开发人员对应用程序运行流畅度的判断完全靠人为感官,无法真正的判断出应用程序的运行流畅性能。



技术实现要素:

针对现有技术中存在的缺陷,本发明的目的在于提供一种用于分析Android端应用运行流畅度的方法和一种用于分析Android端应用运行流畅度的系统,能够直观反映应用运行的流畅度。

为达到以上目的,本发明采取的技术方案是,包括:实时获取应用每一帧的总时间,其中,每一帧的总时间通过命令行工具获取的帧数据解析求和得到,并创建后台分析组件,通过分析组件实时分析应用每一帧的总时间,得出并展示应用的实时流畅度。

在上述技术方案的基础上,所述帧数据包括应用每次运算的绘制时间、准备时间、计算时间和执行时间,所述每一帧的总时间为绘制时间、准备时间、计算时间和执行时间的和。

在上述技术方案的基础上,帧数据的获取步骤为:

S1.1:启动Android端应用,并调用命令行工具dumpsys gfxinfo;

S1.2:获得应用当前进程的运行环境;

S1.3:调用运行环境中的exec方法,获取结果流,所述结果流包括应用128次运算的帧数据。

在上述技术方案的基础上,应用每一帧的总时间的实时获取步骤为:

S2.1:解析结果流得到解析流,遍历解析流得到帧数据的绘制时间、准备时间、计算时间和执行时间;

S2.2:对帧数据的绘制时间、准备时间、计算时间和执行时间求和,得到应用每次运算占用总时间。

在上述技术方案的基础上,将结果流保存成csv格式的文件后进行解析。

在上述技术方案的基础上,所述后台分析组件为Android系统的service组件。

在上述技术方案的基础上,所述后台分析组件运行在异步线程中。

本发明还公开了一种用于分析Android端应用运行流畅度的系统,包括:

数据采集模块,其用于获取应用每一帧的总时间,应用每一帧的总时间通过命令行工具获取的帧数据解析求和得到;

判断模块,其用于根据应用每一帧的总时间,判断应用当前是否流畅运行;

输出模块,其用于将判断模块的判断结果展示于应用显示端。

在上述技术方案的基础上,所述帧数据包括应用每次运算的绘制时间、准备时间、计算时间和执行时间。

在上述技术方案的基础上,所述应用显示端为用于运行应用的智能移动设备的屏幕。

与现有技术相比,本发明的一种用于分析Android端应用运行流畅度的方法的优点在于:通过获取应用的帧数据,并计算出应用每次运算占用总时间,即应用每一帧的总时间,根据经验公式计算得出应用运行是否流畅,且能够在运行待分析流畅度的应用的同时,在智能移动设备的屏幕上显示出分析结果,方便开发人员找出应用运行卡顿的具体位置,便于后续对应用的优化。

本发明的一种用于分析Android端应用运行流畅度的系统的优点在于:数据采集模块采集应用每一帧的总时间,而后判断模块对采集的数据进行判断后,由输出模块将结果显示在智能移动设备的屏幕上,直观反映应用的流畅度,自动化程度高,极大地减轻了应用开发人员的工作难度。

附图说明

图1为本发明一种用于分析Android端应用运行流畅度的方法的流程图。

具体实施方式

以下结合附图对本发明作进一步详细说明。

参见图1所示,本发明提供一种用于分析Android端应用运行流畅度的方法,用于对运行在Android操作系统上的应用的运行流畅度进行分析,Android操作系统运行于智能移动设备上,如智能手机。该方法包括:实时获取应用每一帧的总时间,其中,每一帧的总时间通过命令行工具获取的帧数据解析求和得到,然后创建后台分析组件,通过分析组件实时分析应用每一帧的总时间,得出并展示应用的实时流畅度。

具体的步骤为:

步骤S1:启动Android端应用,并调用命令行工具,获取应用的帧数据,帧数据为应用的每次运算时间组成,对帧数据求和即可得到应用每一帧的总时间,帧数据包括应用每一次运算的绘制时间、准备时间、计算时间和执行时间,对应用每一次运算的绘制时间、准备时间、计算时间和执行时间求和即得到应用每一帧的总时间。本实施例中,命令行工具为dumpsys gfxinfo。dumpsys gfxinfo为Android操作系统的性能分析优化工具。dumpsys gfxinfo通过Android操作系统中Runtime(运行时刻)类的getRuntime方法调用。帧数据的获取步骤为:

S1.1:启动Android端应用,并调用命令行工具dumpsys gfxinfo;

S1.2:获得应用当前进程的运行环境;

S1.3:调用运行环境中的exec方法,获取结果流,所述结果流包括应用128次运算的帧数据。

由于dumpsys gfxinfo为命令行的工具,该工具分析得出的结果也显示在命令行上,我们需要将分析得出的应用运行流畅结果直接显示在智能移动设备的屏幕上,因此需要代码来实现该逻辑,代码具体为:

Process process=Runtime.getRuntime()//获取java运行环境

process.exec(“dumpsys gfxinfo pkg|grep-A 128Exexute”)//执行命令

对代码的解释如下:

使用Runtime类的getRuntime方法来获得应用当前进程的运行环境,getRuntime返回一个进程的运行环境对象,这时,使用进程的运行环境中的exec方法来执行命令,执行的命令为“dumpsys gfxinfo”,同时在执行的命令后面加上应用的包名pkg,从而获取结果流,获得的结果流并不全是应用的帧数据,还有其它的一些无用的描述,因此需要在“dumpsys gfxinfo”命令后面加上“grep”以对数据进行过滤,最终得到应用128次运算的帧数据,完整的命令即为“dumpsys gfxinfo pkg|grep-A 128Exexute”。应用每一次运算的帧数据即为应用每一帧的总时间。

帧数据包括应用每一次运算的绘制时间、准备时间、计算时间和执行时间,对绘制时间、准备时间、计算时间和执行时间求和即可得到智能设备一帧画面的所占用的时间,也就是应用每一帧的总时间,dumpsys gfxinfo每次获取的结果流为最近128帧的时间信息。

exec方法是非阻塞的,为了获取结果流,需要调用进程的运行环境中的waitFor方法使exec方法处于等待状态,等执行的命令结束后,调用进程的运行环境中的getInputStream方法来获取结果流,过滤后得到最近128帧的时间信息。

步骤S2:解析帧数据,并求和得到应用每一帧的总时间。应用每一帧的总时间的实时获取的步骤为:

步骤1中获得的帧数据的结果流为一字符串,该字符串的排列方式为4×128的形式,每列分别为绘制时间、准备时间、计算时间和执行时间,总共4列;每行为应用每一帧的总时间的组成,应用一次运算的帧数据,总共128行,共应用运行的最近128帧的时间信息。为了便于对字符串进行解析,需要将结果流的字符串保存成一个csv格式的文件后再解析,即将结果流保存成一csv格式的文件。Csv为一常见的文件格式。

对保存成一个csv格式的结果流进行解析得到解析流,并遍历解析流得到帧数据内的绘制时间、准备时间、计算时间和执行时间,得到128个帧数据。

对解析流的遍历过程为:

调用java中的BufferedReader工具类,并创建一BufferedReader对象,java为一常见编程语言,BufferedReader为java中的缓存阅读器。然后将解析流作为参数传入到BufferedReader对象中,BufferedReader工具类有一readLine方法,readLine方法用于读取解析流的每行数据,就这样依次读完解析流所有行的数据,读完后,readLine方法每次返回的为128个帧数据中的1个帧数据的字符串,即应用一次运算的绘制时间、准备时间、计算时间和执行时间,为了方便后续步骤的求和计算,需要将每帧数据的字符串进行拆分,使用’\t’字符对每帧数据的字符串进行拆分,得到包含有应用每次运算的绘制时间、准备时间、计算时间和执行时间的字符串组,即帧数据的字符串组,以此处理完128个帧数据。

因为字符串是无法求和的,故需要将包含有应用每次运算的绘制时间、准备时间、计算时间和执行时间的字符串组转成浮点数,最后对帧数据的绘制时间、准备时间、计算时间和执行时间求和,得到应用每一帧的总时间,即对上述拆分后得到的应用每次运算的绘制时间、准备时间、计算时间和执行时间进行求和,得到应用每一帧的总时间,即应用显示画面1帧所需时间。字符串组转成浮点数通过Float(单精度浮点型)类的parseFloat方法实现,parseFloat用于解析字符串,然后返回浮点数。

步骤S3:创建后台分析组件,实时展示应用流畅度分析结果。

本实施例中,后台分析组件为Android操作系统中的service组件,service为Android操作系统的系统服务组件。为了达到边操作应用界面边获取应用流畅度分析结果的目的,从而便于找出应用使用过程中容易卡顿的步骤或位置,且不干扰待分析流畅度的应用本身的使用,因此采用service组件,service组件可以在Android操作系统的后台运行,这样达到Android操作系统前台,即智能移动设备的屏幕运行待分析流畅度的应用,Android操作系统后台运行service组件的目的。

service组件默认运行在Android操作系统的主线程中,为了防止service组件阻塞主线程,因此需要创建一异步线程,通过android操作系统提供的线程工具类HandlerThread创建线程自带消息循环队列,然后创建一个以线程自带消息循环队列绑定的handler对象,handler用于异步消息的处理,这样通过handler对象可以将需要调用的消息进行循环发送,即后台分析组件service组件运行在异步线程中,但能够将应用的流畅度分析结果展示在Android操作系统的前台,即智能移动设备的屏幕上。

Android操作系统的智能移动设备的刷新率都是60,即每1秒刷新屏幕60次,人肉眼能感受到动画的频率是每秒24次,超过24次人就感觉是动态的,而1秒60几乎能完全感觉是动态的,1秒60次计算后即智能移动设备的屏幕没16.66ms刷新一次,智能移动设备的若给人感官表现为界面不卡,则Android操作系统中应用每次运算需要在16.66ms内完成,否则会干扰下次界面的刷新,即出现丢帧现象。

应用的实时流畅度通过以下经验公式计算得出:

I=V*X*W1+(max/16.66)*W2-d

当I大于0时,表示流畅,当I小于0时,表示不流畅;

其中,I表示流畅值;V表示丢帧率,例如若在最近的30帧画面中,其中有5帧画面的显示时间超过16.66ms,即在应用的30次运算中,有5次运算占用总时间超过16.66ms,则丢帧5次,丢帧率为1/6;X为丢帧上限默认经验,X等于20;max表示最大的应用一次运算占用总时间,例如在最近的30次运算中,最长的单次运算总时间为20ms,则max等于20;W1为丢帧率的权重,W2为丢帧时长的权重,W1和W2一般均取值为1;d为W1与W2之和d,d用来保证I的值在一个合理的范围内。

在进行流畅值的计算时,会先选取一计算范围,一般选取最近的30个帧数据,即应用最近的30次运算进行分析,则max为该30次运算中最大的一次运算占用总时间。

得出流畅度分析结果后,将分析结果,即将流畅或不流畅的结论显示在智能移动设备的屏幕上,具体的使用TextView的setText对结论进行显示,TextView为Android操作系统中用于显示文本的空间,setText用于确定结论。

本发明还公开了一种基于上诉方法的用于分析Android端应用运行流畅度的系统,包括数据采集模块、判断模块和输出模块。

数据采集模块,其用于获取应用每一帧的总时间,应用每一帧的总时间通过命令行工具获取的帧数据解析求和得到,帧数据为应用每次运算时间组成,帧数据包括应用每次运算的绘制时间、准备时间、计算时间和执行时间,即帧数据内包括应用每一次运算的绘制时间、准备时间、计算时间和执行时间,且数据采集模块采集应用的多次运算时间,并对帧数据中的绘制时间、准备时间、计算时间和执行时间求和得到应用每一帧的总时间,即应用每1帧所需的时间。

判断模块用于根据应用每一帧的总时间,即数据采集模块得到的多个应用每一帧的总时间,即多次运算的时间信息,采用上述经验公式,判断应用当前是否流畅运行;输出模块用于将判断模块的判断结果展示于应用显示端,应用显示端为用于运行应用的智能设备的屏幕。

本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1