渲染优化
来源:互联网 发布:淘宝现在做什么比较好 编辑:程序博客网 时间:2024/05/22 14:21
众所周知Android系统每隔16ms重新绘制一次activity,也就是说你的app必须在16ms内完成屏幕刷新的所有逻辑操作,这样才能达到60帧/s (16.66=1000/60). 而用户一般所看到的卡顿是由于Android 的渲染性能造成的。
如图:
然而有的时候你的程序会出现这样的情况,如果某个绘制操作超过16ms用了24ms,这时候用户看同一张图片花了32秒,用户就会感到卡顿,这种现象我们叫-丢帧
那么我们如何了解是如何出现这种情况并如何去解决,
首先我们要了解android 的渲染机制
android 的渲染主要分为两个组件:
1.CPU 2.GPU 屏幕上的绘制就是由他们两共同完成的。
在屏幕上绘制UI无论是按钮还是复选框文本首先都需要CPU去将这些对象转换为多边形和纹理,然后再交给GPU去栅格化操作。
问题来了:
1.CPU将对象转换位多变形和纹理耗时,同样上传到GPU也耗时。
幸运的是OpenGL-ES API允许数据上传到GPU进行数据保存,当下一次绘制的时候只需要在cpu的存储器里引用它
所以渲染性能的优化就是尽快的上传数据到GPU,尽可能长的在不修改数据的条件下保存数据
虽然安卓系统已经完成了大部分优化,但还有一个问题造成性能的影响--过度绘制
那么什么是过度绘制呢
屏幕上的某个像素点在同一帧的时间内绘制了多次
如何清除过度绘制呢。
蓝色--代表正常,淡绿--绘制了两次,淡红--绘制了3次 深红--绘制4次或更多。
我们的目标就是尽量减少红色Overdraw,看到更多的蓝色区域。
我们可以通过手机设置里面的开发者选项,打开Show GPU overdraw选项,可以观察UI上的Overdraw的情况
1.将Activity中的主题背景置为空,如下getWindow().setBackGroundDrawable(null)
2.去掉不必要的布局背景图片
3.我自定义控件时,可以使用canvas.clipRect()方法( 对画布进行裁剪)避免出现重叠的区域
上面是对GPU的优化,接下来我们对CPU的优化
layout刷新避免复杂的层级结构嵌套
这里我们可以通过HierarchyViewer工具来分析我们打开之后会看到下面的层级结构如图:
绿色快于一般的50% 黄色慢于一般的50% 红色表示视图管道中最慢
比如
linearLayout 中包裹RelativeLayout,能用一个RelativeLayout尽量用一个搞定
megar替换不需要的t布局 ViewStub标签替换需要显示隐藏的布局
0 0
- 渲染优化
- 渲染优化
- [Unity 优化]渲染优化
- 优化浏览器渲染
- 优化浏览器渲染
- 优化浏览器渲染
- 优化浏览器渲染
- 优化浏览器渲染
- 渲染优化 lock unlock
- 浏览器渲染速度优化
- 图形渲染优化技巧
- ogre渲染优化
- ogre渲染优化
- ogre渲染优化
- OpenGL之渲染优化
- 使用批次优化渲染
- Unity3D渲染优化技巧
- 渲染优化 lock unlock
- 福利-Github桌面版下载
- Python中Requests库的用法
- 蓝桥杯--历届试题 兰顿蚂蚁 【DFS模拟】
- 腾讯云ubuntu搭建tomcat
- 【GAN的魔法】生成对抗网络技术进展及论文笔记3
- 渲染优化
- 23. Merge k Sorted Lists
- 进程的概念/标识/结构/状态
- Sqlhelper
- @org.springframework.beans.factory.annotation.Autowired(required=true)
- 程序的职业规划
- 利用MATLAB分析红米note4的音频采集卡性质
- OGG 进程清除、重建
- C#实现木马程序