bis*_*ish 5 performance android lint android-layout hierarchyviewer
使用HierarchyViewer工具,您可以检查应用程序的布局层次结构。这很好用,我可以毫无问题地分析我的观点。我还用Lint检查了我的来源。
如优化 UI中所述,颜色代表视图测量、布局和绘制的速度。
性能指标:一组三个彩色点,指示此 View 相对于树中其他 View 对象的渲染速度。三个点代表(从左到右)渲染的测量、布局和绘制时间:
颜色表示以下相对性能:
- 绿色:对于这部分渲染时间,此 View 位于树中所有 View 对象中速度较快的 50%。例如,测量时间的绿点表示该 View 的测量时间比树中 50% 的 View 对象更快。
- 黄色:对于这部分渲染时间,此 View 位于树中所有 View 对象中较慢的 50% 中。例如,布局时间的黄点表示该 View 的布局时间比树中 50% 的 View 对象慢。
- 红色:对于这部分渲染时间,此视图是树中最慢的视图。例如,绘制时间的红点表示该 View 在树中的所有 View 对象中花费最多的绘制时间。
这意味着红色灯泡“仅”意味着该特定项目与树中的所有其他项目相比是最慢的。这并不意味着时间比值 X 慢,因此它被读取 - 就像您从 ping 分析工具中知道的那样,这些工具以红绿灯方式显示其结果,关于测量的 ping 为“慢、中、快”次。
在检查了我的应用程序的不同视图后,我注意到输入字段比文本字段慢,LinearLayouts
然后更快FragmentLayouts
,诸如此类。然后,我搜索了有关改善某些视图的绘制时间的信息和帮助。但这次搜索对我来说并不是很满意。
谷歌优化你的用户界面告诉你:
使用视图层次结构进行优化
查看层次结构还可以帮助您识别渲染性能缓慢的情况。首先查看具有红色或黄色性能指示器的视图节点,以识别较慢的视图对象。当您逐步执行应用程序时,您可以判断视图是否始终缓慢或仅在某些情况下缓慢。
请记住,性能缓慢并不一定是问题的证据,尤其是对于 ViewGroup 对象。具有更多子级和更复杂的 View 对象的 View 对象渲染速度更慢。
“查看层次结构”窗口还可以帮助您发现性能问题。只需查看每个 View 节点的性能指标(点),您就可以了解哪些 View 对象的测量、布局和绘制速度最慢。由此,您可以快速确定应该首先查看的问题。
我的选择或多或少告诉你什么。在另一页Revise Your Layout上有一个小示例,其中将两个文本视图放在 a 内LinearLayout
,然后将其放入 a 内RelativeLayout
,以便一个层次结构消失。
在“使用 Lint”部分中可以找到更多提示:
- 使用复合可绘制对象 - 包含 ImageView 和 TextView 的 LinearLayout 可以作为复合可绘制对象更有效地处理。
- 合并根框架 - 如果 FrameLayout 是布局的根并且不提供背景或填充等,则可以将其替换为稍微更有效的合并标记。
- 无用的叶子 - 通常可以删除没有子项或没有背景的布局(因为它是不可见的),以获得更平坦、更高效的布局层次结构。
- 无用的父级 - 具有子级的布局没有同级,不是 ScrollView 或根布局,并且没有背景,可以删除并将其子级直接移动到父级中,以获得更平坦、更高效的布局层次结构。
- 深度布局 - 嵌套过多的布局不利于性能。考虑使用更扁平的布局(例如RelativeLayout 或GridLayout)来提高性能。默认最大深度为 10。
但我仍然怀念一些(经过验证的)答案和技巧,如何设计良好的视图层次结构或哪些视图元素不应该(大量)与外部元素一起使用/组合。像这样的东西你应该少用layout_weight
,因为它会降低性能(修改你的布局)。
在分析的 lint 中,有一些有用的措辞,例如
在此元素上设置 android:baselineAligned="false" 以获得更好的性能
所以我现在的问题是:您知道哪些技巧/提示/“代码样式”可以提高 UI 的性能?应该使用哪些视图元素而不是其他视图元素,因为它们的性能更好?您如何提高布局性能?