【问题标题】:what is the difference of thread.sleep and systemclock.sleep. and which one should be used in AsyncTask?thread.sleep 和 systemclock.sleep 有什么区别。在 AsyncTask 中应该使用哪一个?
【发布时间】:2012-09-05 23:05:58
【问题描述】:

我发现如果我在中间运行 AsyncTask 时退出了一个活动,当我尝试再次启动该活动时,我将不得不等到前一个 AsyncTask 完成后再启动新的 AsynTask。我尝试了 thread.sleep 和 systemclock.sleep,它给了我相同的结果。这是有道理的,因为我猜我关闭和打开的线程是相同的。如果用户退出活动,是否有办法取消 AsyncTask?因为这样用户第二次进入相同的活动他就不必等到之前的完成。 我在 onPause() 中尝试了 asyntask.cancel(true),它不起作用,同样的事情发生了。

【问题讨论】:

  • 它有效,谢谢!但是我的问题的第一部分怎么样? thread.sleep 还是 systemclokc.sleep?
  • 我继续为您问题的特定部分提交了一个实际答案,见下文。

标签: android


【解决方案1】:

据我了解,Thread.sleep() 和 SystemClock.sleep() 之间的唯一区别是 Thread.sleep() 可以被中断。也就是说,类似于:

SystemClock.sleep(10*1000);

让调用线程休眠 10 秒,就是这样,你只需要等待。鉴于:

Thread.sleep(10*1000);

还将调用线程休眠 10 秒。但是,如果您从另一个线程引用了正在休眠的线程,您现在可以选择以下内容:

sleepingThread.interrupt();

有效地将 sleepingThread 从 10 秒的睡眠中唤醒。

就您的问题而言,这对 AsyncTask 更好,我认为这仍然完全符合您的要求。我当然不知道您的确切代码,但鉴于您的任务的 doInBackground 显然正在休眠,并且您希望能够在任意时间取消您的任务,Thread.sleep() 可能更有意义。

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 1970-01-01
    • 2012-01-16
    • 2012-02-15
    • 2021-04-15
    • 1970-01-01
    • 2019-05-31
    • 2019-10-14
    相关资源
    最近更新 更多