Android布局优化——减少过度绘制

标签(空格分隔): 翻译 android 性能优化

原文:Optimizing Layouts in Android – Reducing Overdraw

你有一个伟大的理想,让多用户启动你的应用。然而,你却听到用户投诉应用反应迟钝以致难以使用。伤心的表现。

有这样的一个步骤去改善应用的渲染时间:查看调度GPU过度绘制工具

什么是过度绘制:

过度绘制一般发生在应用要求系统在已有的视图上绘制别的视图。调试工具通过在屏幕上覆盖不同的颜色来划分该像素被重绘了几次。

如何打开调试工具

  1. 进入系统设置
  2. 点击开发者选项
  3. 选择调度GPU过度绘制
  4. 在弹出的对话框中选择显示过度绘制区域

你将注意到屏幕改变了颜色,不要惊慌。进入到你的应用,这时我们就可以一步一步弄明白如何改善布局。

不同颜色代表的意义

五种颜色分别代表着:

原始色(即没有发生改变)——代表屏幕上该像素块仅被绘制了一次。

蓝色(我感觉更像淡紫)——重绘1x——像素块被被绘制了两次。

绿色——重绘2x——绘制了三次。

粉色——重绘3x——绘制了四次。

红色——重绘4x——绘制了五次。

颜色表
颜色表

能通过我的应用(原作者的)Book Dash application,初始布局中有很多过度绘制的地方。

如何修复过度绘制

在上面的粟子中,移除了RelaytiveLayout 的背景色并通过theme 设置背景。

原来的:

<RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="#FFFFFF">

现在的:

<RelativeLayout
     android:layout_width="match_parent"
     android:layout_height="match_parent">

修改布局得到以下结果:


如你所见,过度绘制减轻,红色区域减少

可以进一步改善,达到以原色和少量的蓝色(淡紫色)为目标。有此过度绘制是必不可少的。(很多布局为了提高多样化控件,多会导致过度绘制,两者之间需要根据实际情况衡量)

并不是所有的过度绘制都是设置背景导致的,其它情况也能导致过度绘制,例如,复杂的View叠加。

你的目标应该是低于 过度绘制2x(绿色)

通过Hierarchy ViewerGL Tracer可查View层次关系,分析过度绘制原因。

……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容