关闭

Android性能优化之渲染优化

标签: android
175人阅读 评论(0) 收藏 举报
分类:
Android性能优化之渲染优化:
Android系统每隔16ms就会重新绘制一次Activity。也就是说你的app必须在16ms内完成屏幕刷新的所有逻辑操作。
如果某个绘制操作超过16ms而用了24ms,这时候用户看到同一张图片就用了32ms而不是16ms,用户就会感到卡顿,这种现象我们叫--丢帧。

Android的渲染机制:
Android渲染主要分为两个组件:
1、CPU
2、GPU
由这两者共同完成在屏幕上的绘制:
Activity如何将复杂的UI转换成用户看得懂的图像并绘制到屏幕上?
这是由栅格化(栅格其实就是像素,PS中的术语)操作完成的,所谓的栅格化就是绘制那些Button,Shape,Path,String,Bitmap等组件最基础的操作。
它把组件拆分到不同的像素上进行显示,说得俗气一点,就是解决那些复杂的xml布局文件和标记语言,使之能转换成用户看得懂的图像,但是这不是直接转换的,xml布局文件需要在CPU中首先转换为多边形或纹理,然后传递给GPU进行格栅化,对于格栅化,跟OpenGL有关。
简而言之,CPU将xml布局转换为多边形或者纹理(也可能是矩形,圆形等,具体看图像的外边框形状),然后OpenGL(GPU)再进行栅格化。

简单理解android的渲染过程:
在屏幕绘制UI对象的时候,先是通过CPU将xml布局转换成对应的多边形,然后GPU再进行栅格化操作

cpu将对象转换为多边形耗时 同样上传到GPU也耗时,所以我们要减少对象转换次数以及上传数据的次数。还好,OpenGL-ES API允许数据上传到GPU进行数据保存,当下一次绘制按钮的时候只要在CPU存储器里引用它。
所以渲染性能的优化,就是尽快的上传数据到GPU尽可能长的不修改数据的条件下保存数据。

过度重绘的可能原因之一,window自带了背景颜色,你所有的控件都是在这层背景之上进行绘制的:
解决方式: 去掉默认背景.
如果整个window存在一个背景,所以进行了一次重绘,这个背景的重绘是系统级别的.和主题有关.所以我们只需在文件管理器的主Activity的onCreate()方法中,加入:
this.getWindow().setBackgroundDrawableResource(android.R.color.transparent);//transparent是透明的,颜色代码是#00000000
优化之后,背景被去掉之后就少了一层过度绘制了.


绘制优化:
绘制优化是指View的onDraw()方法要避免产生大量的操作,主要有两点:
1)尽量不要在onDraw()方法中创建临时对象,就是尽量不要在onDraw()里面new东西,不仅占用了过多的内存,还会频繁的调用gc,降低了程序的执行效率.
2)尽量不要在onDraw()方法中做耗时任务,也不要执行成千上次的循环操作,尽管每次循环都很轻量级,但是大量的循环仍十分强占CPU的时间,会造成View的绘制过程不流畅.








0
0
查看评论

Android性能优化——渲染、内存、电源优化

android性能优化篇 —— 本文主要从 界面,内存,电量优化三个方面展开 ,整理一下 用户为何感知到卡顿的原因?优化内存的一些措施,减少电量消耗的一些策略。
  • sinat_15877283
  • sinat_15877283
  • 2016-03-04 23:27
  • 1068

Android性能优化之电量优化

1、在android framework里面有专门负责电量统计的Service:BatteryStatsSerive ①这个Service在ActivityManagerService中创建,代码如下: mBatteryStatsService = new BatteryStatsSer...
  • zhaodecang
  • zhaodecang
  • 2016-11-26 00:40
  • 16266

Android性能优化之提高ListView性能的技巧

ListView优化一直是一个老生常谈的问题,不管是面试还是平常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看如何最大化的优化ListView的性能。
  • nugongahou110
  • nugongahou110
  • 2015-07-29 15:13
  • 13925

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

众所周知的Android系统每隔16ms重新绘制一次activity,也就是说你的app必须在16ms内完成屏幕刷新的所有逻辑操作,这样才能达到60帧/s。而用户一般所看到的卡顿是由于Android的渲染性能造成的。 本篇博客将介绍Android的渲染相关知识。 然而有的时候你的程序会出现这样...
  • u012124438
  • u012124438
  • 2017-03-10 00:45
  • 4126

性能优化十之UI卡顿之CPU与GPU优化

在上一篇博客当中具体讲解了为什么内存抖动和耗时的复杂计算会导致UI卡顿. 其中还穿插了一些UI的渲染机制的知识。 这篇博客将介绍对于渲染最重要的CPU与GPU如何去优化。 具体的GPU与CPU的知识上篇博客中有很详细的讲解。   首先我们来看从GPU角度去优化:   &...
  • hpc19950723
  • hpc19950723
  • 2016-12-22 21:57
  • 737

Android性能优化之渲染优化

Android系统每隔16ms重新绘制一次Activity,意思就是你的app必须在16ms内完成屏幕刷新的所有逻辑操作,这样才可以达到60帧/s。但是用户一般看到的卡顿是由于Android渲染性能造成的。 首先我们要了解Android的渲染机制,主要分为两个组件:CPU和GPU。 这两者共同完...
  • bwf_erg
  • bwf_erg
  • 2017-03-14 19:14
  • 63

java性能优化之字符串优化处理

1.String对象  String对象是java中重要的数据类型,在大部分情况下我们都会用到String对象。其实在Java语言中,其设计者也对String做了大量的优化工作,这些也是String对象的特点,它们就是:不变性,常量池优化和String类的final定义。1.1 不变性  Strin...
  • u010870518
  • u010870518
  • 2016-07-10 10:18
  • 3054

WebView性能优化

本系列文章讨论WebView的各种用法以及使用技巧
  • AllenWells
  • AllenWells
  • 2016-07-29 09:36
  • 2099

关于tableView的性能优化

tableView
  • LIUitcast
  • LIUitcast
  • 2016-08-03 10:56
  • 509

ReactJS修炼之路(四):组件的性能优化及开发思路

少年,加油昨天周五,那个喊我“少年”的朋友离职了去新加坡了,我的实习生涯又错过了一位大神,不过短短一个月还是被影响不少,例如入坑happy hacking keybord同时学习各类软件的快捷键,例如开始用sass,例如初次使用 flexbox…人生何处不相逢,谢谢你的指导,我会更加努力,也祝你更...
  • code_for_free
  • code_for_free
  • 2016-08-06 22:09
  • 1555
    个人资料
    • 访问:1450次
    • 积分:102
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    文章存档