e-works数字化企业网  »  文章频道  »  基础信息化  »  移动应用

Android性能优化系列之渲染优化

2017/3/13    来源:博客    作者:佚名      
关键字:Android性能优化  安卓渲染优化  
众所周知的Android系统每隔16ms重新绘制一次activity,也就是说你的app必须在16ms内完成屏幕刷新的所有逻辑操作,这样才能达到60帧/s。而用户一般所看到的卡顿是由于Android的渲染性能造成的。本篇博客将介绍Android的渲染相关知识。
    众所周知的Android系统每隔16ms重新绘制一次activity,也就是说你的app必须在16ms内完成屏幕刷新的所有逻辑操作,这样才能达到60帧/s。而用户一般所看到的卡顿是由于Android的渲染性能造成的。本篇博客将介绍Android的渲染相关知识。 
 
   Android性能优化系列之渲染优化
 
    然而有的时候你的程序会出现这样的情况,如果某个绘制操作超过了16秒用了24秒这时候用户看同一张图片花了32秒而不是16s,用户会感到卡顿,这种现象我们叫-丢帧
 
    Android的渲染机制
 
    首先我们要了解android的渲染机制,android 的渲染主要分为两个组件。
 
    1.CPU 
 
    2.GPU 
 
    由这两者共同完成在屏幕上绘制 
 
   Android性能优化系列之渲染优化
 
    Activity如何将复杂的UI转换成用户看得懂的图像并绘制到屏幕上? 
 
    这是由格栅化操作完成的,所谓的栅格化就是绘制那些Button,Shape,Path,String,Bitmap等组件最基础的操作。它把那些组件拆分到不同的像素上进行显示,说的俗气一点,就是解决那些复杂的XML布局文件和标记语言,使之转化成用户能看懂的图像,但是这不是直接转换的,XML布局文件需要在CPU中首先转换为多边形或者纹理,然后再传递给GPU进行格栅化,对于栅格化,跟OpenGL有关,格栅化是一个特别费时的操作。
 
    简单理解android的渲染过程 
 
    CPU在图像绘制之前向GPU输入这些指令这一过程通过OpenGL-E 。
 
    也就是说在屏幕绘制UI对象的时候都需要在CPU中转化成多边形再传递GPU进行格栅化操作。
 
    CPU将对象转换为多边形耗时,同样上传到GPU也耗时所以我们要减少对象转换次数以及上传数据的次数,幸运的是OpenGL-ES API允许数据上传到GPU进行数据保存,当下一次绘制按钮的时候只要在CPU的存储器里引用它。
 
    所以渲染性能的优化就是尽快的上传数据到GPU尽可能长的在不修改数据的条件下保存数据 
 
    虽然android系统已经完成的大部分的优化但是还有一个问题造成了性能的影响–>过度绘制(OverDraw)
 
    过度绘制(overdraw)检测
 
    屏幕上的某个像素点在同一帧的时间内绘制了多次。 
 
    当设计上追求更华丽的视觉效果的时候,我们就容易陷入采用越来越多的层叠组件来实现这种视觉效果的怪圈。这很容易导致大量的性能问题,为了获得最佳的性能,我们必须尽量减少Overdraw的情况发生。
 
    按照以下步骤打开Show GPU Overrdraw的选项:设置 -> 开发者选项 -> 调试GPU过度绘制 -> 显示GPU过度绘制。
 
   Android性能优化系列之渲染优化
 
    蓝色,淡绿,淡红,深红代表了4种不同程度的Overdraw情况:
 
    蓝色: 意味着overdraw 1倍。像素绘制了两次。大片的蓝色还是可以接受的(若整个窗口是蓝色的,可以摆脱一层)。 
 
    绿色: 意味着overdraw 2倍。像素绘制了三次。中等大小的绿色区域是可以接受的但你应该尝试优化、减少它们。 
 
    淡红: 意味着overdraw 3倍。像素绘制了四次,小范围可以接受。 
 
    深红: 意味着overdraw 4倍。像素绘制了五次或者更多。这是错误的,要修复它们。 
 
    我们的目标就是尽量减少红色Overdraw,看到更多的蓝色区域。
 
    优化过渡绘制区域
 
    下面我们通过一个例子来优化过度绘制,我们使用上面的方法,定位过度绘制的地方。 
 
   Android性能优化系列之渲染优化
 
    从图上可以看出,按照过渡绘制从好到坏(蓝-绿-粉红-红)来看,文件管理器的过渡绘制是非常严重的,而设置界面的过渡绘制则在可以接受的范围内。下面就以文件管理器为主要分析对象,来看看如何对文件管理器的过渡绘制进行优化。
 
    从文件管理器的图,分析出过渡绘制区域 
 
    首先看最上面的ActionBar,对比设置界面的ActionBar就可以知道,整个文件管理器存在一个不透明的背景,导致每次绘制时,都要先绘制这个看不见且不透明的背景。这个背景一般是应用的主题自带的背景,所以GPU过渡绘制显示其位蓝色,这个背景是可以进行优化的。
 
    中间的内容部分,最底层是绿色,说明进行了2x的过渡绘制,去掉第一条我们提的那个全局背景,还有一层背景,也就是1x的过渡绘制,对比setting可知,这个背景色也是可以去掉的。 
 
    最容易看出的是这两条,我们先分析和优化这两条,然后再进行其他的优化。
 
    优化过渡绘制区域 
 
    在进行位置确认后,我们大概确定了过渡绘制的区域,让我们来使用工具来进行验证和View确认。
 
    打开Monitor(Eclipse和Android Studio中都有快捷打开按钮,即DDMS,右上角选择 Hierarchy View,大概使用如图。
 
Android性能优化系列之渲染优化
 
    其中根节点:PhoneWindos$DecorView是整个视图的根节点,唯一的子节点是ActionBarOverlayLayout,这个Layout包含了ActionBar,应用程序,以及SmartBar。
 
    下面讲述如何从Hierarchy View结合代码分析出需要进行修改的区域。
 

责任编辑:李欢
本文来源于互联网,e-works本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供,并以尽力标明作者与出处,如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。联系方式:editor@e-works.net.cn tel:027-87592219/20/21。
e-works
官方微信
掌上
信息化
编辑推荐
新闻推荐
博客推荐
视频推荐