2

我有一个活动来衡量布局的动画/布局/测量/等需要多长时间。

class RenderingMeasureActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.skeleton)

        val view = layoutInflater.inflate(R.layout.simple, root, false)
        root.postDelayed({
            root.addView(view)
        }, 5000)
    }
}

骨架布局不过是FrameLayoutwithmatch_parent和 id root。简单的布局就是:

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="ahoj"
        android:textSize="32sp" />

</FrameLayout>

在活动中,我已经推迟了addView(),所以我确定我只是在衡量那个,没有其他影响。

现在,无论我做什么,测量结果都超出了图表。它至少需要 17 毫秒(平均更像 25 毫秒),这是 JANK(>16.7 毫秒)的明确来源。最长的持续时间是命令问题,我从FrameMetricsgpu 分析栏和类似的持续时间也从systrace获得相同的结果。

我究竟做错了什么?是否有可能addView(或inflate任何布局都非常昂贵,以至于 Android SDK 应用程序总是会出现 JANK?为什么,如果在 中设置相同的布局(合并为一个)setContentView(),它需要更少的时间(虽然不是很多)?

PS:我尝试了其他布局,例如约束,线性,相对。合并标签有一点帮助,但并不总是可用。
PPS:以编程方式创建布局没有效果,因为我已经分离了充气部分。

4

0 回答 0