根据以下文件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()
尽量减少这个机会.
从源代码,View.postDelayed()
只是Handler.postDelayed()
在内部处理程序上使用,所以没有区别.
foo()
可能会泄漏活动,你应该View.removeCallbacks()
尽量减少这个机会.