Android中LinearLayout条件显示:初始设gone或visible的性能最优选择
从Android性能优化的角度来看,在XML中给LinearLayout设置android:visibility="gone",需要时再在代码中切换为可见,是更优的选择。原因主要有这几点:
布局加载阶段减少无用计算:当View的visibility为gone时,系统在加载布局时只会完成View的实例化,不会执行
measure(测量)和layout(布局)步骤。如果默认设为visible,哪怕你之后马上要隐藏它,系统也会先完成这两个耗时的步骤——尤其是当这个LinearLayout里嵌套了大量子View时,这部分冗余计算的性能损耗会很明显。避免不必要的资源占用:gone状态的View虽然依然占用内存(因为已经被实例化),但不会占用绘制相关的额外资源,也不会参与界面的绘制流程。而visible状态的View会一直维持绘制准备状态,哪怕它实际上不需要显示。
动态切换的开销差异极小:两种方式切换visibility的开销其实差不多,都会触发
requestLayout和invalidate。但默认gone的情况下,只有当第一次需要显示时才会执行measure/layout;而默认visible的话,初始加载时多做了一次无用的measure/layout,之后隐藏时还要再执行一次。
当然,也有例外情况:如果这个LinearLayout在绝大多数业务场景下都是需要显示的,只有极少数情况才会隐藏,那默认设为visible可能反而更合适——毕竟省去了第一次显示时的measure/layout开销。但从通用的性能最优角度,默认gone是更稳妥的选择。
内容的提问来源于stack exchange,提问作者Moussa

