【Interface&navigation】优化布局层次结构(8)

使用基本布局结构导致最高效的布局是一个常见的误解。但是,添加到应用程序中的每个小部件和布局都需要初始化,布局和绘图。例如,使用嵌套实例LinearLayout可能会导致视图层次过深。此外,嵌套LinearLayout使用layout_weight参数的几个实例 可能特别昂贵,因为每个孩子需要测量两次。当布局反复膨胀时,这尤其重要,例如在a ListView或b中使用GridView。

在本课中,您将学习使用Hierarchy Viewer和Lint来检查和优化您的布局。

检查您的布局


Android SDK工具包含一个名为Hierarchy Viewer的工具,可让您在应用程序运行时分析布局。使用此工具可帮助您发现布局性能中的瓶颈。

层次结构查看器的工作原理是允许您在连接的设备或仿真器上选择正在运行的进程,然后显示布局树。每个模块上的交通信号灯代表其测量,布局和绘图性能,帮助您识别潜在问题。

例如,图1显示了用作a中项目的布局ListView。此布局在左侧显示一个小的位图图像,在右侧显示两个堆叠的文本项目。特别重要的是多次膨胀的布局 - 比如这个 - 会进行优化,因为性能优势将会倍增。

【Interface&navigation】优化布局层次结构(8)
图1. a ListView。中项目的概念布局

层次结构查看器显示可用设备及其运行组件的列表。从Windows选项卡中选择您的组件,然后单击层次结构视图查看所选组件的布局层次结构。例如,图2显示了图1所示列表项目的布局。

修改你的布局


由于上面的布局性能由于嵌套而降低LinearLayout,因此可以通过展平布局来提高性能 - 使布局变得浅而宽,而不是狭窄和深沉。RelativeLayout作为根节点的A 允许这样的布局。所以,当这个设计被转换为使用时 RelativeLayout,你可以看到这个布局变成了一个2层次的层次结构。检查新的布局如下所示:
【Interface&navigation】优化布局层次结构(8)

图2.使用嵌套实例的图1中布局的布局层次结构LinearLayout。

【Interface&navigation】优化布局层次结构(8)
图4.使用图1中布局的布局层次结构RelativeLayout。

扫描二维码关注公众号,回复: 1771395 查看本文章

由于这种布局用于列表中的每个项目,因此其好处尽可能小,因此会倍增数倍。

大多数的差异是由于使用layout_weight的 LinearLayout设计,它可以减缓测量的速度。这只是每个布局如何适当使用的一个示例,您应该仔细考虑是否需要使用布局权重。

在一些复杂的布局中,系统可能会浪费不止一次的测量相同的UI元素。这种现象被称为双重征税。有关双重征税和如何防止双重征税的更多信息,请参阅“ 绩效和视图层次结构”。

使用Lint


在布局文件上运行lint工具以搜索可能的视图层次结构优化总是一个好习惯。Lint取代了Layoutopt工具,并具有更多功能。皮棉规则的一些例子是:

使用复合drawables - LinearLayout包含an ImageView和a的a TextView可以更有效地作为复合drawable进行处理。
合并根框架 - 如果a FrameLayout是布局的根,并且不提供背景或填充等,则可以用稍微高效的合并标签替换它。
无用的叶子 - 没有子女或没有背景的布局通常可以被移除(因为它是不可见的),从而获得更平坦更有效的布局层次结构。
无用的父 - 没有兄弟的孩子的布局不是一个 ScrollView或一个根布局,并且没有背景,可以被删除并让其子节点直接进入父级,以获得更平坦更有效的布局层次结构。
深层布局 - 嵌套过多的布局对性能不利。考虑使用扁平化的布局,如 RelativeLayout或GridLayout提高性能。默认的最大深度是10。
Lint的另一个好处是它集成到Android Studio中。Lint会在您编译程序时自动运行。通过Android Studio,您还可以针对特定构建版本或所有构建版本运行lint检查。

您还可以使用文件>设置>项目设置选项来管理检测配置文件并在Android Studio中配置检测 。“检查配置”页面显示支持的检查。

【Interface&navigation】优化布局层次结构(8)
图5.检测配置

林特有能力自动修复一些问题,为他人提供建议并直接跳转到违规代码进行审查。

有关本课的更多信息,请参阅 XML布局和 布局资源。

联系我

QQ:94297366
微信打赏:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ

公众号推荐:

【Interface&navigation】优化布局层次结构(8)

猜你喜欢

转载自blog.51cto.com/4789781/2133063