【问题标题】:What is the difference between View.postDelayed() and Handler.postDelayed() on the main thread?主线程上的 View.postDelayed() 和 Handler.postDelayed() 有什么区别?
【发布时间】:2017-06-03 09:29:30
【问题描述】:

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

使 Runnable r 被添加到消息队列中,以便运行 经过指定的时间后。可运行的将运行 在附加此处理程序的线程上。

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

使 Runnable 被添加到消息队列中,在之后运行 经过指定的时间量。可运行文件将在 用户界面线程。

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

我已经阅读了这篇article,关于当我使用内部类处理程序时我可能会如何泄漏活动,我想知道使用View.postDelayed() 是否会导致同样的问题。

例如 foo() 是否会导致问题,或者销毁活动是否会解决 Runnable 匿名类持有对活动的引用的事实?

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

【问题讨论】:

    标签: java android multithreading android-handler


    【解决方案1】:

    从源头上看,View.postDelayed() 只是在内部处理程序上使用Handler.postDelayed(),所以没有区别。

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

    【讨论】:

    猜你喜欢
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-07
    • 2011-01-29
    相关资源
    最近更新 更多