Android[学习] UI优化方案

本文介绍了三种移动应用UI优化的方法:使用Overdraw检测并解决过度绘制问题;利用HierarchyViewer减少不必要的布局嵌套;以及合理使用Android布局标签如<include>、<merge>和<ViewStub>提高UI性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目开发完毕后,然后就是优化,怎么优化呢,我是先从ui方向优化。

###第一种 Overdraw的检测

手机里面就能打开测试,设置 -> 开发者选项 -> 调试GPU过度绘制 -> 显示GPU过度绘制,从字面意思就可以看到,它是查看绘制过程中过度绘制严重程度。

打开后会发现有多种颜色,每种颜色代表不同的过度绘制程度。

那么如果你发现你的app上深红色的色块比较多,那么可能就要注意了。

怎么处理呢?

  • (1)布局程度的调整,如果在布局中重复设置 background,就会出现过度绘制,例如,在设置列表listview背景为白色,background=“white”,但是想让条目也为白色,设置background为白色,这样就造成了过度绘制

  • (2)使用中设置background,例如在设置imageview的时候先设置一个预显示background,然后再设置

  • (3)自定义View中有些图片要叠加使用,就会造成过度绘制,使用clipRect能解决这类型问题。

###第二种 Hierarchy Viewer 减少不必要的且套

Android studio中有
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7VOJS6zz-1593140247187)(http://i.imgur.com/A2bdISH.png)]

Android的官方文档中,有这么一句话:

出于安全考虑,Hierarchy Viewer只能连接Android开发版手机或是模拟器

romainguy在github上有个项目ViewServer,可以下载下来导入到IDE中,里面有个ViewServer的类,类注释上也标注了用法,在你希望调试的Activity以下该三个方法中,添加几行代码:

  public class MyActivity extends Activity {
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          // Set content view, etc.
          ViewServer.get(this).addWindow(this);
      }
        
      public void onDestroy() {
          super.onDestroy();
          ViewServer.get(this).removeWindow(this);
      }
    
      public void onResume() {
          super.onResume();
          ViewServer.get(this).setFocusedWindow(this);
      }
  }

经验:一个是Linearlayout嵌套的,一个是RelativeLayout的。Linearlayout的版本相对RelativeLayout的版本要慢很多(请多次点击Profile Node取样)。即可说明RelativeLayout的版本更优于Linearlayout的写法,并且Hierarchy Viewer可以帮助我们发现类似的问题。

第三种 Android标签的优化

<include>

如果在一个项目中需要用到相同的布局设计,可以通过 标签来重用layout代码,
这样可以多次引用一个布局片段而不用重复的复制、粘贴。通过include标签也可以覆写一些属性的值,

<merge>

标签在UI的结构优化中起着非常重要的作用,它可以删减多余的层级,优化UI。多用于替换FrameLayout或者当一个布局包含另一个时,标签消除视图层次结构中多余的视图组。例如你的主布局文件是垂直布局,引入了一个垂直布局的include,这是如果include布局使用的LinearLayout就没意义了,使用的话反而减慢你的UI表现。这时可以使用标签优化。

<ViewStub />

标签最大的优点是当你需要时才会加载,使用他并不会影响UI初始化时的性能。各种不常用的布局想进度条、显示错误消息等可以使用标签,以减少内存使用量,加快渲染速度。是一个不可见的,大小为0的View。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值