Android性能--布局层级

Android性能优化有一个很重要的点就是布局层级问题,一般来说,布局层级越少,性能越高,所以在平时的编码过程中,尽可能避免不必要的布局层级是非常重要的。

所以本文稍微记录一下布局层级的一些大概,了解一下,在你setContentView的时候,当前一共有哪些布局。

继承Activity

OK,这大概是最简单的一个页面了,根布局是个RelativeLayout,里面一个TextView。如图:

simple_view.png

那么这么简单的布局具体有哪些层级呢?如图:

simple_hierarchy.png

吓我一跳~

仔细看看这个层级,首先最底下是一个DecorView,这个View是每个Window的根布局,Demo中是占据整个屏幕的,它底下有且只有一个Linearlayout,不太清楚这个布局的意义,不过它也是充满整个屏幕的,然后有一个ViewStub,一个FrameLayout,ViewStub是通知栏的那块区域,FrameLayout就是我们setContentView的那个布局的父布局,可以看到它的id定死为content,所以我们经常可以看到,为什么当我们自己的布局的根布局是FrameLayout的时候我们可以用merge代替,因为没必要设置两层FrameLayout,后面的两个应该都知道了,不赘述。

继承AppCompatActivity

AppCompatActivity这个类自己已经添加了几层Layout了,不过不看不知道,一看吓一跳,竟然自作主张给我加了这么多层,我们的页面:

appcompat_view.png

也是很简单,不过加了一个Actionbar的标题栏。

布局层级图:

appcompat_hierarchy.png

乍一看好像差不多,实际上从第三层开始给我先加了个FrameLayout,然后是ActionbarOverlayLayout,然后分了一个自定义布局的父布局和Actionbar的布局,后面的就不赘述了。

奇怪的是,我不太清楚这个FrameLayout有什么意义,直接ActionbarOverlayLayout不行?

好了,记录完毕,写完收工~