首页 > 技术文章 > Android布局优化之层级优化

net19880504 2017-02-18 10:44 原文

程序的每个组件和 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 来管理配置文件。

 

 

 

 

 

推荐阅读