高效使用 Layout

 

1 优化 Layout 层次

看了前面很多高效开发 android 的方法,你恐怕很难注意到,滥用 layout 的后果有多严重。在你的应用中加入的任何一个 widget 和 layout 都需要进行初始化、布局和渲染。比如,嵌套的 LinearLayout 会导致过度的 View 分层,而使用了layout_weight 的嵌套LinearLayout 将导致其所有子元素被重复测量两次。

 

本节简要介绍几种 Layout 优化工具,具体请参考:

 

https://developer.android.com/training/improving-layouts/optimizing-layout.html

 

  • Layout 检查工具:Hierarchy Viewer

Hierarchy Viewer可以图示化呈现你的Layout 分层结构,并计算你的每一个布局元素进行初始化、布局和渲染所需要的时间,然后以此为参考对你的布局进行修正以降低你的布局时间代价,你可以在你的 sdk/tools 下找到这个工具。

 

  • Layout 检查工具:Lint

Lint 帮助检查你的 Layout 并提出修改建议,以下是 Lint 推荐的一些规则:

 

1.    尽量使用复合 drawable 代替某些简单布局

2.    merge 无用的 FrameLayout,如果它没做任何有意义的事(无背景、无边距、无子元素等等);

3.    剔除无用的叶子节点 layout,如果它没做任何有意义的事;

4.    剔除无用的父节点 layout,如果它不是根、不是scrollview、无背景、无兄弟节点;

5.    将纵向深层次 layout 扁平化

这些原则也是我们平常使用 Layout 时应该注意的地方。

 

2 学会复用你的 Layout

  • 使用 <include/> 合理复用 Layout 可以简化你的 layout 布局,利于维护你的 layout 文件;
  • 使用 <merge/> 可以有效缩减不必要的 Layout 嵌套,提高 Layout 的效率。

 

3 只在需要时加载的Views——上马为兵,下马为民

在程序界面中,有些复杂元素只在特定的时候才显示出来,比如进度条、按钮组等,将其按需显示和渲染可以减少内存消耗和加快界面的渲染速度。

 

使用 ViewStub 可以完成这个目标,ViewStub 是一个无尺寸轻量级的 view,它无需渲染,可以很轻松地从layout 层次中加入和取消而不会消耗多少资源。你可以将你需要按需显示的 layout 加入到 ViewStub 的 layout 属性中即可。

 

当你需要显示你的 layout 时,设置 ViewStub 的Visible 属性或者 inflate 即可。

 

4 让 ListView 流畅地滑行——谁都痛恨堵车

使用 ListView 加载列表资源在我们的项目中经常需要用到,我们需要时刻记住的一点是:永远不要让 ListView 踌躇前行。

 

  • 使用后台线程加载耗时工作

如果在 ListView 中加载了大对象(如图片)或网络数据,请将这些工作放到 AsyncTask 中去做,因为它们都是耗时的,特别是加载网络数据时,若没有开辟后台线程,你的编译器甚至会报错!

 

  • 使用 Holder 模式减轻你的View 加载负担

滑动 ListView 时通常需要通过 findViewById 来遍历重复利用的 itemView,如果每次 getView 时都要如此,则效率会很低,这时我们用一个 Hoder 对象来存储 itemView 的所有子元素,并将 Hodler 作为该 itemView 的 tag,那么每次取itemView 的子元素时可以避开低效的findViewById,而是直接从其 tag 中获取。

 

以上规则同样适用于 GridView。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值