视频先行
下面是视频内容的脚本整理稿。如果你看了视频,那下面的文稿就不用看了,直接翻到底部就行。
开场
做 Android 开发的都知道一个规矩:布局文件的界面层级要尽量地少,越少越好,因为层级的增加会大幅拖慢界面的加载。这种拖慢的主要原因就在于各种 Layout 的重复测量。虽然重复测量对于布局过程是必不可少的,但这也确实让界面层级的数量对加载时间的影响变成了指数级。而 Jetpack Compose 是不怕层级嵌套的,因为它从根源上解决了这种问题。它解决的方式也非常巧妙而简单——它不许重复测量。
……嗯?

View 层数和界面加载性能的关系
大家好,我是扔物线朱凯。
在定制 ViewGroup
的布局过程的时候,我们需要重写两个方法:onMeasure()
用来测量子 View,onLayout()
用来摆放测量好的子 View。测量和摆放明明是连续的过程,为什么要拆成两步呢?因为我们在 ViewGroup
里可能会对子 View 进行多次测量。
比如一个纵向的 LinearLayout
,当它的宽度被设置成了 wrap_content
的时候:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
...
</LinearLayout>
它会依次测量自己所有的子 View,然后把它们最宽的那个的宽度作为自己最终的宽度。
但……如果它内部有一个子 View 的宽度是 match_parent
:
<