2012-09-05 60 views
4

我想知道如果我在中间运行AsyncTask时退出活动,并且当我尝试再次启动该活动时,必须等到先前的AsyncTask在新的AsynTask启动之前完成。我尝试了thread.sleep和systemclock.sleep,它给了我相同的结果。这是有道理的,因为我猜想我关闭并打开的线程是相同的。如果用户退出一个活动,那么它有一种方法可以取消AsyncTask?因为那时用户第二次输入相同的活动,他不必等到先前完成。 我在onPause()中尝试了asyntask.cancel(true),它不起作用,发生同样的事情。thread.sleep和systemclock.sleep有什么区别。哪一个应该用在AsyncTask中?

+2

看看这里:http://stackoverflow.com/questions/4748964/android-cancel-asynctask-forcefully – newbyca

+0

它的作品谢谢!但是我的问题的第一部分呢? thread.sleep或systemclokc.sleep? –

+0

我继续为您的问题的具体部分提交实际答案,请参阅下文。 – newbyca

回答

7

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

SystemClock.sleep(10*1000); 

睡眠调用线程10秒,这就是说,您只需等待。鉴于:

Thread.sleep(10*1000); 

也将睡眠调用线程10秒。但如果你从另一个线程休眠线程的引用,你现在有类似的选项:

sleepingThread.interrupt(); 

有效地唤醒sleepingThread来自其10个第二睡眠。

在您的问题的背景下,哪个更适合AsyncTask,我认为它完全取决于您的要求。我当然不知道你的确切代码,但考虑到你的任务的doInBackground显然是在做一些睡眠,并且由于你希望能够在任意时间取消你的任务,Thread.sleep()可能会更有意义。

相关问题