方向

  • 正确性
  • 采用合适的布局方式
  • 避免频繁多余计算
  • 懒加载
  • 代码重用(从工程层面考虑)

说明

正确性

关于正确性,即严格按照视觉稿进行布局。布局正确的重要性高于性能层面,毕竟那是用户最直观的感受。

调整布局时,有需要的时候建议打开「开发者选项-显示布局边界」

布局方式

要保证布局的正确性,首先得选择正确的布局方式。实际上,现在最常用的布局方式就是RelativeLayoutLinearLayout

大部分情景下,相对布局和线性布局在性能上的差异并不明显。涉及控件重叠的情景,一般使用相对布局;而线性排列属性明显的界面一般使用相对布局(虽然用相对布局也可以实现甚至性能稍优,但这种情景下线性布局的代码可读性、拓展性更强)。

避免频繁多余计算

Android的布局极少使用绝对布局,因此无论是哪种布局,在系统层面,控件的尺寸、位置都需要重新计算。(一般情况下线性布局的计算量会比相对布局大一些)

关于visibility官方的简单说明

1
2
3
visible: Visible on screen; the default value.
invisible: Not displayed, but taken into account during layout (space is left for it).
gone: Completely hidden, as if the view had not been added.

关于View的显示状态,这里讨论invisiblegone的区别;由官方说明可知,两者的共同点是不可见,区别在于invisible依然占用着布局空间,gone不占用布局空间。

因此,若一个View在visiblegone之间切换,会使布局空间进行重新计算;在一些情景下,如频繁显示的加载指示图,使用invisible取代gone能够避免一些多余计算。

当然在很多线性布局中,是明确需要gone属性的,具体问题具体分析。

懒加载

按需加载:
http://developer.android.com/training/improving-layouts/loading-ondemand.html

Sometimes your layout might require complex views that are rarely used. Whether they are item details, progress indicators, or undo messages, you can reduce memory usage and speed up rendering by loading the views only when they are needed.

官方文档的说明,然后介绍了viewstub,使用相对简单。

可参考:
http://developer.android.com/reference/android/view/ViewStub.html
http://blog.csdn.net/hitlion2008/article/details/6737537

代码重用

一些重复使用的控件代码,使用include