Android应用过度绘制量化分析的方法及装置与流程

文档序号:15445149发布日期:2018-09-14 23:16阅读:598来源:国知局

本发明涉及信息技术领域,尤其是一种android应用过度绘制量化分析的方法及装置。



背景技术:

随着智能移动设备的迅猛发展,与其对应的各种应用软件也层出不穷,软件同质化也非常严重。在这种个情况下,一个应用要想脱颖而出就必须要比其他同类应用有着更好的用户体验,而软件是否能流畅使用则是用户体验中的一个至关重要的指标。影响软件流畅度的因素有很多,其中一个就是该应用软件的用户界面的绘制复杂度,复杂度越高流畅度就越差。但目前还没有一个稳定的、普适的能精确计算绘制复杂度即过度绘制量化的方案。

现有技术中关于过度绘制量化的技术方案主要有两种,一种是通过hookapi技术,hookandroid4.4中的一个名为drawoverdrawcounter的方法;在android4.4系统的开发者选项中有一个“调试gpu过度绘制“-”显示过度绘制计数器“,开启后会在屏幕上显示一个当前用户界面过度绘制的数字,以上提及的drawoverdrawcounter方法就是用来绘制该数字的。通过hook这个方法,把它绘制到屏幕上的数字打印到日志中就能直接获取到每个页面过度绘制的情况了;该方案存在的缺点是只能在android4.4系统上运行,而目前android系统已经到了8.0,系统适用范围太小,需要运用到apihook技术,实现复杂度和成本过高;另一个方案是基于页面截图分析方案,在android系统的开发者选项中有一个选项“调试gpu过度绘制“,选择其中的”显示过度绘制区域“,开启后系统会在不同渲染复杂度的元素上渲染上不同的颜色,具体来说一层过度绘制的显示为蓝色,二层过度绘制的会显示为绿色,三层过度绘制的会显示为粉红色,四层及以上过度绘制的会显示为红色。然后对手机屏幕做截图,并对截图做分析,看其中不同颜色的区域的面积大小,计算出来一个渲染复杂度;该方案存在的缺点是通过对截图进行颜色分析来获取复杂度的,而不同的应用的用户界面本身就有各种不同的颜色,会对分析造成影响,导致结果不稳定。



技术实现要素:

本发明的目的是为了解决上述现有技术存在的缺点,提供一种android应用过度绘制量化分析的方法及装置,通过系统相关命令androiddump获取用户当前ui层次结构的xml文件,并以此分析获得当前过度绘制的数值,该命令在android4.1及以上系统中都存在且从目前android的系统分布看,大部分都在该版本之上,因此能稳定的在大部分android版本上运行。

为了实现上述目的,本发明采用了以下技术方案:android应用过度绘制量化分析的方法,包括下述步骤:

(1)用android系统命令dump获取到当前ui层次结构的xml文件;

(2)对xml文件进行逐层分析,并保存所有控件的显示区域信息;

(3)将所有控件的显示区域做重叠区域比较,获得控件重叠的区域信息;

(4)计算控件重叠的区域信息,获得当前页面的过度绘制的值。

作为优选,步骤(1)是用androiduiautomator的dump命令用来获取当前ui层次结构的xml文件。

作为优选,步骤(2)是将xml文件读取到内存并进行逐层分析,并将所有控件的显示区域保存到内存。

作为优选,步骤(3)中获得控件重叠的区域信息包括:没有控件重叠的区域信息、一个控件重叠的区域信息、两个控件重叠的区域信息、三个控件重叠的区域信息和四个控件重叠的区域信息。

作为优选,创建五个列表,列表overdrawlist0存放没有控件重叠的区域信息;列表overdrawlist1存放一个控件重叠的区域信息;overdrawlist2存放两个控件重叠的区域信息;overdrawlist3存放三个控件重叠的区域信息;overdrawlist4存放四个控件重叠的区域信息。

作为优选,对xml文件进行逐层分析是遍历ui层次结构的xml文件,将所有控件放置到列表中。

作为优选,步骤(4)中计算控件重叠的区域信息的步骤如下:

a.获取待比较控件m的信息;

b.从overdrawlist4中选取一个过度绘制区域n,然后比较控件m和n的重叠区域,将产生如下几种结果中的一种:

b1,m和n没有任何重叠,不做任何操作继续和overdrawlist4中的其他区域做比较;

b2,m完全包含n,将m和n的重叠区域从m中剪裁掉得到新的区域m1;将m1重新执行一遍重叠区域计算操作;

b3,n完全包含m,将m放置到overdrawlist4中;将m和n的重叠区域从n中剪裁掉得到新的区域n1;将n1放置到overdrawlist4中;

b4,m和n部分重叠,将m和n的重叠区域s放置到overdrawlist4中;将s从n中剪裁掉得到新的区域n1;将n1放置到overdrawlist4中;将s从m中剪裁掉得到新的区域m1;将m1重新执行一遍重叠区域计算操作;

c.重复执行b操作直到剪裁后的m1和overdrawlist4中的所有区域都不存在任何重叠;

d.将m1和overdrawlist3中的所有区域做重叠区域计算得到新的区域m2,直到裁剪后的m2和overdrawlist3中的任何区域都不存在重叠;

e.将m2和overdrawlist2中的所有区域做重叠区域计算得到新的区域m3,直到裁剪后的m3和overdrawlist2中的任何区域都不存在重叠;

f.将m3和overdrawlist1中的所有区域做重叠区域计算得到新的区域m4,直到裁剪后的m4和overdrawlist1中的任何区域都不存在重叠;

g.将m4放到overdrawlist0中;

h.对overdrawlist1的所有区域的面积求和为s1,对overdrawlist2的所有区域的面积求和为s2,对overdrawlist3的所有区域的面积求和为s3,对overdrawlist4的所有区域的面积求和为s4;将s1、s2、s3和s4相加得到总面积s,通过公式的平均算法得到过度绘制的值。

作为优选,比较控件m的信息是位置信息和尺寸参数信息。进一步的,公式是:(s1+s2*2+s3*3+s4*4)/s。

android应用过度绘制量化分析的装置,包括:

获取模块,用android系统命令dump获取到当前ui层次结构的xml文件;

分析模块,对xml文件进行逐层分析,并保存所有控件的显示区域信息;

比较模块,将所有控件的显示区域做重叠区域比较,获得控件重叠的区域信息;

计算模块,计算控件重叠的区域信息,获得当前页面的过度绘制的值。

作为优选,计算模块包括:

比较控件获取单元,获取待比较控件m的信息;

计算单元,将比较控件m和比较模块上的控件重叠的区域信息进行计算,并得到过度绘制的值。

本发明的android应用过度绘制量化分析的方法及装置,优点是能降低对应用软件的渲染复杂度的获取成本,帮助研发人员发现问题,最终提高应用软件的用户体验。

附图说明

图1:本发明实施例的android应用过度绘制量化分析的方法流程图。

图2:本发明实施例的在发明实施例的android应用过度绘制量化分析装置的结构框图。

图3:本发明实施例中的文本控件示意图。

具体实施方式

下面结合图1-图3对本发明做进一步描述。

为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。

缩略语解释。过度绘制:一个应用程序在同一帧内、一个事件中多次绘制相同的像素。android,安卓系统:google推出的一款移动手机系统。apihook:是一种用于改变api执行结果的技术。uiautomator:google推出的一个用于ui自动化测试的工具。adb:android调试桥是一个通用命令行工具,其允许您与模拟器实例或连接的android设备进行通信。

图1本发明实施例的android应用过度绘制量化分析的方法流程图,如图1所示的android应用过度绘制量化分析的方法,包括下述步骤:(1)用android系统命令dump获取到当前ui层次结构的xml文件101;(2)对xml文件进行逐层分析,并保存所有控件的显示区域信息102;(3)将所有控件的显示区域做重叠区域比较,获得控件重叠的区域信息103;(4)计算控件重叠的区域信息,获得当前页面的过度绘制的值104。

本实施例中,步骤(1)是androiduiautomator的dump命令用来获取当前ui层次结构的xml文件。

本实施例中,步骤(2)对xml文件进行逐层分析是遍历ui层次结构的xml文件,将所有控件放置到列表中,图3是文本控件示意图,图3中的社保查询201即文本控件。

本实施例中,步骤(3)中获得控件重叠的区域信息包括:没有控件重叠的区域信息、一个控件重叠的区域信息、两个控件重叠的区域信息、三个控件重叠的区域信息和四个控件重叠的区域信息。

创建五个列表,列表overdrawlist0存放没有控件重叠的区域信息。列表overdrawlist1存放一个控件重叠的区域信息。overdrawlist2存放两个控件重叠的区域信息。overdrawlist3存放三个控件重叠的区域信息。overdrawlist4存放四个控件重叠的区域信息。

谷歌官方对过度绘制定义了5个层次,分别是:无过度绘制,一层过度绘制,两层过度绘制,三层过度绘制,4层及以上过度绘制,其中无过度绘制对计算结果无影响,所以选择4个即可,本实施例的获得控件重叠的区域信息完全是匹配谷歌官方对过度绘制的定义设置的。

本实施例中,步骤(4)是遍历列表,计算所有控件重叠的区域信息,获得当前页面的过度绘制的值,步骤如下:

a.获取待比较控件m的信息,例如控件m左上角坐标为(20,50),宽高为(200,400);

b.从overdrawlist4中选取一个过度绘制区域n,然后比较控件m和n的重叠区域,将产生如下几种结果中的一种:

b1,m和n没有任何重叠,不做任何操作继续和overdrawlist4中的其他区域做比较;

b2,m完全包含n,将m和n的重叠区域从m中剪裁掉得到新的区域m1;将m1重新执行一遍重叠区域计算操作;

b3,n完全包含m,将m放置到overdrawlist4中;将m和n的重叠区域从n中剪裁掉得到新的区域n1;将n1放置到overdrawlist4中;

b4,m和n部分重叠,将m和n的重叠区域s放置到overdrawlist4中;将s从n中剪裁掉得到新的区域n1;将n1放置到overdrawlist4中;将s从m中剪裁掉得到新的区域m1;将m1重新执行一遍重叠区域计算操作;

c.重复执行b操作直到剪裁后的m1和overdrawlist4中的所有区域都不存在任何重叠;例如本次对比发现m和overdrawlist4中的元素不存在任何重叠。即m1的左上角坐标为(20,50),宽高为(200,400);

d.将m1和overdrawlist3中的所有区域按上述的重叠区域计算方法做重叠区域计算得到新的区域m2,直到裁剪后的m2和overdrawlist3中的任何区域都不存在重叠;例如本次裁剪后m2的左上角坐标为(20,50),宽高为(100,200),而overdrawlist4中多了3个元素,分别是a:左上角坐标(120,50),宽高位(100,200),b:左上角坐标(20,250),宽高位(100,200),c:左上角坐标(121,251),宽高位(100,200);

e.将m2和overdrawlist2中的所有区域按上述的重叠区域计算方法做重叠区域计算得到新的区域m3,直到裁剪后的m3和overdrawlist2中的任何区域都不存在重叠;例如本次裁剪后m3的左上角坐标为(45,50),宽高为(50,100),而overdrawlist3中多了3个元素,分别是a:左上角坐标(20,50),宽高位(50,200),b:左上角坐标(95,50),宽高位(50,100),c:左上角坐标(20,151),宽高位(100,100);

f.将m3和overdrawlist1中的所有区域按上述的重叠区域计算方法做重叠区域计算得到新的区域m4,直到裁剪后的m4和overdrawlist1中的任何区域都不存在重叠;例如m3和overdrawlist1中的一个元素完全重叠,overdrawlist1中少了m3对应的区域,相应的overdrawlist2中多了一个和m3对应的区域。

g.将m4放到overdrawlist0中;

h.对overdrawlist1的所有区域的面积求和为s1,对overdrawlist2的所有区域的面积求和为s2,对overdrawlist3的所有区域的面积求和为s3,对overdrawlist4的所有区域的面积求和为s4;将s1、s2、s3和s4相加得到总面积s,通过公式的平均算法得到过度绘制的值,公式是:(s1+s2*2+s3*3+s4*4)/s。即通过计算所有控件重叠的区域信息获取用户界面中被一层过度绘制、二层过度绘制、三层过度绘制和四层过度绘制区域的面积,然后根据公式计算得到应用当前过度绘制的数值。例如s1面积为395064,s2面积为829440,s3面积为622080,s4面积为103680,总面积s为2073600,所以最后的过度绘制值为(395064+829440*2+644080*3+103680*4)/2073600=2.122349537。

本实施例中,比较控件m先和数值大的列表overdrawlist4做比较能简化逻辑,比较控件本身是需要和所有列表中的所有元素做对比的,如果m先和overdrawlist1做了对比并且发现重合区域,这个重合区域m1就会被放到overdrawlist2中,因为过度绘制层数又增加了1,当m剩下的区域m2再去和overdrawlist2中的数据做比较的时候就会再和m1做一次比较,而这个比较是不必要的,因为m1和m2本身是一定不重合的。

如图2所示的android应用过度绘制量化分析的装置,包括获取模块11、分析模块12、比较模块13和计算模块14。

获取模块11,用android系统命令dump获取到当前ui层次结构的xml文件。分析模块12,对xml文件进行逐层分析,并保存所有控件的显示区域信息。比较模块13,将所有控件的显示区域做重叠区域比较,获得控件重叠的区域信息。计算模块14,计算控件重叠的区域信息,获得当前页面的过度绘制的值,计算模块14包括比较控件获取单元141和计算单元142;比较控件获取单元141,获取待比较控件m的信息;计算单元142,将比较控件m和比较模块上的控件重叠的区域信息进行计算,并得到过度绘制的值。

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