View 嵌套太深会卡?来用 Jetpack Compose,随便套——Intrinsic Measurement

视频先行

下面是视频内容的脚本整理稿。如果你看了视频,那下面的文稿就不用看了,直接翻到底部就行。

开场

做 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

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值