Android布局优化之层级优化

Posted geeeeeeeek

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android布局优化之层级优化相关的知识,希望对你有一定的参考价值。

程序的每个组件和 Layout 都需要经过初始化、布局和绘制,如果布局嵌套层次过深,就会导致加载操作更为耗时,更严重的话还可能导致内存溢出。本节我们学习使用两个工具来检查和优化 Layout。

 

 

HierarchyViewer

 

 

该工具位于android SDK tools中,使用HierarchyViewer可以分析正在运行app的布局,从而打破影响布局性能的瓶颈。

 

HierachyViewer通过选择运行在模拟器或真机上的进程来工作,并通过布局树来展示。上面每个标识代表布局的Measure、Layout和Draw的性能,帮助开发者来定位潜在的问题。

 

如图1所示,图中是ListView中的一条布局,这个布局左边是一个ImageView,右边是一个LinearLayout中嵌套两个TextView布局。

 

 

技术分享

图1

 

HierarchyView工具可以用于Android模拟器,打开后,即可看到可用设备列表和运行的组件。在Windows选项卡里,点击Hierarchy View后,即可看到选择组件的布局层次结构。例如图2 展示了图1 的ListItem布局的层次结构。

 

技术分享

图2

 

 

减少层次结构

 

由于上图使用了嵌套的LinearLayout结构布局,导致性能变慢。我们可以使用扁平化的思想来优化它们——布局要宽而广,而不是窄而深! 我们可以使用Relativelayout来作为顶级节点,这样转向RelativeLayout来布局之后,我们会看到下图这样的布局层级结构。

 

技术分享

图3

 

修改为RelativeLayout布局之后,层级减少,布局性能大大增强。另外,LinearLayout中的layout_weight也会减慢measure的速度,所以不是必要时不要使用layout_weight属性。这只是一个小小的例子,在一些非常复杂的布局中,如果层级太多或LinearLayout嵌套过多,系统会将很大性能消耗在UI的measure计算上面,因此,层级结构优化至关重要。

 

Lint

Android Lint是在 ADT 16 提供的新工具,它是一个代码扫描工具,Lint已经替代了Layoutopt tool成为重要的提示工具,它具有更多更高级的功能 ,能够帮助我们识别代码结构存在的问题。Lint 包含的一些检测规则有:

 

  • 使用 compound drawable 替代一个包含 ImageView 和 TextView 的 LinearLayout。

  • 合并根 FrameLayout

  • 没用的子节点或父节点

  • 硬编码问题

 

另外,开发者可以通过 File>Settings>Project Settings 来管理配置文件。

 

技术分享

 

 

 

技术分享

 

以上是关于Android布局优化之层级优化的主要内容,如果未能解决你的问题,请参考以下文章

Android性能优化之布局优化

Android性能优化总结

史上最全Android性能优化方案解析

史上最全Android性能优化方案解析

Android布局优化

布局优化方法