性能优化1--UI优化
程序员文章站
2022-05-28 12:41:22
1.使用系统为我们提供了几个抽象的标签 ①include:重用 ②viewstub:按需加载 注意: ③merge:减少布局层数 ......
1.使用系统为我们提供了几个抽象的标签
①include:重用
include中layout属性指定一个外部布局文件,通过该方式则不需要把这个布局文件在该代码中重复的写一遍了。 若include指定了其他的android:layout_*的这种属性,则layou_width和Layout_height必须存在。否则其他的无法生效
②viewstub:按需加载
viewstub标签和include标签很相似,都是使用layout属性来加载一个布局。不同之处是include标签用来重用布局,该布局会在App启动加载时被加载进内存。而viewstub标签所引用的布局是不会被加载出来的,只有当你在某个时间需要使用时才会被加载出来,从而在解析layout时节省了cpu加载时间和内存的占用。 它的意义在于按照需要加载所需的布局文件,在实际开发中,有很多的布局文件在正常的情况下不需要显示,当需要其显示的时候才会显示。比如网络加载动画的布局,这个时候没有必要在整个界面初始化的时候将其加载进来,通过ViewStub就可以做到在使用的时候再加载。提高了程序性能。 按需加载代码: ((ViewStub)findViewById(R.id.stub_import)).setVisibility(View.VISIBLE); 或者: View importPanel = ((ViewStub)findViewById(R.id.stub_import)).inflate();
注意:
之前看到网上很多朋友说将View的可见性设置为gone。该View同样不会被加载到内存。其实这种说法是错误的。从Android源码可以知道,即使将View的visiablity设置为gone,View同样会被加载的内存资源当中。即只有只有ViewStub加载的layout在App启动后才不会被加载到内存资源。
③merge:减少布局层数
merge标签用来取消layout的层级的显示。大家都知道,Android*布局DecorView的根布局是让FrameLayout。此时在我们的布局中如果我们使用FrameLayout,就会造成布局节点的层级叠加重复绘制。Android为我们提供了一个叫做hierarchy viewer来查看布局节点信息。该工具在sdk/tools目录下。