gpt4 book ai didi

java - 主线程上的 View.postDelayed() 和 Handler.postDelayed() 有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:06 25 4
gpt4 key购买 nike

根据Handler.postDelayed(Runnable r, long delayMillis)的文档:

Causes the Runnable r to be added to the message queue, to be run after the specified amount of time elapses. The runnable will be run on the thread to which this handler is attached.

另一方面View.postDelayed(Runnable action, long delayMillis):

Causes the Runnable to be added to the message queue, to be run after the specified amount of time elapses. The runnable will be run on the user interface thread.

我想知道从主线程调用它们时两者之间是否有区别,特别是在销毁 Activity 时是否有区别?

我读过这个article关于当我使用内部类 Handler 时我可能会如何泄漏 Activity,我想知道使用 View.postDelayed() 是否会导致同样的问题。

例如,foo() 是否会导致问题,或者 Activity 的破坏是否会解决 Runnable 匿名类持有对 Activity 的引用这一事实?

public class MyActiviy extends Activity {
private void foo(View v) {
v.postDelayed(new Runnable() {
public void run() {
// some delayed work
}
}, 60000);
finish();
}
}

最佳答案

从源代码来看,View.postDelayed() 只是在内部处理程序上使用 Handler.postDelayed(),因此没有区别。

foo() 可能会泄漏 Activity,您应该使用 View.removeCallbacks() 来尽量减少这种机会。

关于java - 主线程上的 View.postDelayed() 和 Handler.postDelayed() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41728973/

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