当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《主线程上的View.postDelayed()和Handler.postDelayed()有什么区别?》经验,为你挑选了1个好方法。

根据以下文件Handler.postDelayed(Runnable r, long delayMillis):

导致Runnable r被添加到消息队列中,在指定的时间量过去之后运行.runnable将在连接此处理程序的线程上运行.

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

导致Runnable被添加到消息队列,以便在指定的时间量过去后运行.runnable将在用户界面线程上运行.

我想知道在从主线程调用它们时两者之间是否存在差异,特别是,如果活动被销毁时存在差异?

我已经阅读了这篇文章,关于当我使用内部类处理程序时如何泄漏Activity,我想知道使用是否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();
    }
}

Steve M.. 9

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

foo()可能会泄漏活动,你应该View.removeCallbacks()尽量减少这个机会.



1> Steve M..:

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

foo()可能会泄漏活动,你应该View.removeCallbacks()尽量减少这个机会.

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有