gpt4 book ai didi

android - 多次调用 requestLayout 或 invalidate 是否会影响性能?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:39:35 32 4
gpt4 key购买 nike

为了移动 View ,我调用了 setX、setY 和其他一些设置宽度和高度的函数,并在每个函数的末尾调用 invalidate 或 requestLayout。因此,每个用户事件都会多次调用 invalidate 和 requestLayout。这会触发每个用户事件的多个布局/绘制吗?

最佳答案

当然不是,我们可以在ViewRootImpl中看到代码

    void invalidate() {
mDirty.set(0, 0, mWidth, mHeight);
if (!mWillDrawSoon) {
scheduleTraversals();
}
}

使设置的脏区无效,并调用scheduleTraversals,它会调用doTraversal。

    void doTraversal() {
if (mTraversalScheduled) {
mTraversalScheduled = false;
mHandler.getLooper().getQueue().removeSyncBarrier(mTraversalBarrier);

if (mProfile) {
Debug.startMethodTracing("ViewAncestor");
}

performTraversals();

if (mProfile) {
Debug.stopMethodTracing();
mProfile = false;
}
}
}

我们可以在代码中看到mTraversalScheduled 标志,如果我们正在安排行程,触发了一个invalidate 事件,mTraversalScheduled 在doTraversal 中为false,所以该方法将直接返回。所以不是每个无效事件都称为 performTravel,不是每个无效事件都称为重绘

关于android - 多次调用 requestLayout 或 invalidate 是否会影响性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7868005/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com