Android UI性能优化(渲染)

概述

谷歌05年初发布性能优化典范,是的开发者学会如何去识别、诊断、解决安卓应用开发中所存在的性能问题。首当其冲的便是渲染的性能优化。

渲染机制

一般原生app开发时,自定义view时,因为布局的层次过多,导致不必要的绘制,,或者因为onDraw等方法中有耗时的操作从而使的界面卡顿。
一般来说,安卓系统美16ms会发出一个信号,触发对ui进行渲染,所以一旦操作超过了16ms酒会发生卡顿的现象。其主要原因就是系统发出信号时,ui无法进行渲染,还在进行别的操作,那么就会导致丢帧的现象。在网上看了看,16ms的原因就是意味1000/60 hz,相当于60fps,人眼感知的一般无法超过60fps。
所以,总的来说,安卓界面的卡顿原因就在于没有必要的布局、invalidations失效以及Overdraw重新绘制屏幕。
主要是通过:
+ 通过Hierarchy Viewer去检测渲染效率,去除不必要的嵌套
+ 通过Show GPU Overdraw去检测Overdraw,最终可以通过移除不必要的背景以及使用canvas.clipRect解决大多数问题。

Overdraw检测

安卓4.2里面,开发者选项菜单有Debug GPU Overdraw,或者以上的话在屏幕左下角会有一个计数展示屏幕overdraw的程度。
另一种方式则是在Debug GPU overdraw菜单里选择“Show Overdraw areas”选项。选择之后,会在app的不同区域覆盖不同的颜色来表示overdraw的次数。比较屏幕上这些不同的颜色,可以快速方便的定位overdraw问题:
白色:没有overdraw 蓝色:1x overdraw(屏幕绘制了2次) 绿色:2x overdraw 浅红色:3x overdraw 深红色:4x或者更多overdraw

总结通过减少view的数量活着去除重复绘制的view,app的渲染会更快。

Overdraw处理方案

移除不要的background

在正常的开发中,可以移除不必要的background,以减少绘制的程度。
如设置了主布局文件的背景颜色,就可以移除listview以及listview的items中的一些background。
以及当我们在layout中设置了背景色,activity的view中的背景就没有必要了,可以调用getWindow().setBackgroundDrawable(null);设置。

使用clipRect

当我们绘制了多个view的时候,如果每一个view并不需要完全绘制在屏幕上时,我们就可以在onDraw方法中使用canvas.clipRect(0, 0, 0,0);方法

Hierarchy Viewer

安卓sdk中包含着歌工具,在android studio中tools下面的android下的android device monitor就能看到。Hierarchy Viewer可以很方便可视化的查看屏幕上套嵌view结构,是查看你的view结构的实用工具。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值