Android 高级进阶之overdraw分析及解决

本文探讨了Android中的overdraw问题,解释了其对应用性能的影响,并提供了检测和减少overdraw的策略。通过减少不必要的背景、统一应用背景颜色、使用clip减少渲染区域以及谨慎使用透明度,可以显著提高应用的性能。此外,文章还介绍了如何在TextView、ImageView和CustomView中高效使用alpha属性以避免overdraw。
摘要由CSDN通过智能技术生成

 

前言

最近在看Android中性能优化的,其中提到了LinearLayout会引起overdraw,但是并没有具体的分析原因,我自己查找了一些资料从LinearLayout的绘制等方面来说明为什么使用LinearLayout会引起overdraw和哪些情况下使用LinearLayout会引起overdraw。希望大家看完之后对view的绘制和测量过程更加了解。

什么是overdraw

Android中在屏幕上绘制一个像素会花一定的时间,如果在屏幕的同一个位置多次绘制就会花大量的时间,多次在屏幕上同一位置绘制的情况就成为overdraw。overdraw会非常影响应用的性能。一个高效的布局要做到两点: 1、减少overdraw。

2、简化布局结构。

看下一个overdraw的例子

上面的六张牌的重合部分被多次绘制引发了overdraw,

检测overdraw

可以通过手机的设置来直观的查看应用的overdraw情况。 1、打开设置,打开开发者选项。 2、选择调试GPU过度渲染。 3、打开显示过度渲染区域。

上面左边是正常的未打开,调试GPU过度渲染的情形,右边是打开GPU过度渲染检测之后的。 上面右图中不同的颜色对应不同的overdraw的次数。对应关系如下:

 

如下三幅图,最右边的是基本上没有overdraw或者只有一次overdraw的,而中间的红色区域很多,大部分是有三次及以上的overdraw。overdraw的次数越多越影响性能,所以中间的这种是不提倡的。

 

减少overdraw的方法

1、减少不必要的background

因为有background的时候会先绘制一遍background然后再在background的基础上面绘制其他元素,所以会增加一次overdraw。 所有用户看不到的background都应该删除掉。 如下面的这个例子:

删除background之前

<ImageView
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:src="@drawable/beach"
   android:background="@android:color/white">
</ImageView>

删除background之后

<ImageView
   android:layout_width="match_parent"
   android:layout
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值