gpt4 book ai didi

android - 为什么在 View 和处理程序上发布和取消可运行会导致不同的行为?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:06:11 24 4
gpt4 key购买 nike

我一直在研究 Runnable并且发现如果你 postDelayed一个RunnableView 上然后删除回调将不起作用,但是如果您执行相同但发布 RunnableHandler 上然后删除回调确实有效。

为什么这行得通(Runnable run() 代码永远不会执行):

Runnable runnable = new Runnable() {
@Override
public void run() {
// execute some code
}
};

Handler handler = new Handler();
handler.postDelayed(runnable, 10000);
handler.removeCallbacks(runnable);

哪里没有(Runnable run() 代码总是被执行)?:

Runnable runnable = new Runnable() {
@Override
public void run() {
// execute some code
}
};

View view = findViewById(R.id.some_view);
view.postDelayed(runnable, 10000);
view.removeCallbacks(runnable);

最佳答案

如果 View 没有附加到窗口,我可以看到这种情况的发生,这看起来像是 Android 中的一个错误。因此,从战术上讲,这可能是一个时间问题,确保在 View 附加到窗口之前不要发布或删除 Runnable

如果您碰巧有一个复制此问题的示例项目,我想看看它。否则,我会尝试自己制作,这样我就可以得到一些东西来报告我推测的错误。


更新

如评论中所述,removeCallbacks() 在更普通的小部件上有效,因此根据 OP 的示例代码,这似乎是一个特定于 WebView 的问题。

关于android - 为什么在 View 和处理程序上发布和取消可运行会导致不同的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9768706/

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