4

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

4

1 回答 1

7

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

SystemClock.sleep(10*1000);

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

Thread.sleep(10*1000);

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

sleepingThread.interrupt();

它有效地将 sleepThread从其10 秒的睡眠中唤醒。

在您的问题的上下文中,这对 AsyncTask 更好,我认为它仍然完全取决于您的要求。我当然不知道您的确切代码,但是鉴于您的任务的 doInBackground 显然正在做一些睡眠,并且您希望能够在任意时间取消您的任务, Thread.sleep() 可能更有意义。

于 2012-09-06T15:42:37.890 回答