线程休眠和系统时钟休眠有什么区别?在AsyncTask中应该使用哪个?

4
我发现如果在运行中退出一个活动,而异步任务在执行一半时,在尝试重新启动该活动时,我必须等待先前的异步任务完成,然后新的异步任务才会开始。我尝试了线程睡眠和系统时钟睡眠,结果都一样。这是有道理的,因为我猜测我关闭和打开的线程是相同的。有没有办法在用户退出活动时仅取消异步任务?因为这样,第二次用户进入同一活动时就不必等待上一个任务完成了。 我在onPause()中尝试了asyntask.cancel(true),但它不起作用,仍然出现了相同的问题。

2
请看这里:https://dev59.com/l2445IYBdhLWcg3wq8FY - newbyca
可以了,谢谢!不过我问题的第一部分呢?是用 thread.sleep 还是 systemclock.sleep? - qwr qwr
我已经提交了关于你问题中特定部分的实际答案,请见下文。 - newbyca
1个回答

7
据我理解,Thread.sleep()和SystemClock.sleep()之间唯一的区别在于Thread.sleep()可以被中断。也就是说,像这样的情况:
SystemClock.sleep(10*1000);

使用sleep函数可以让调用线程休眠10秒钟,这就是它的作用,你需要等待。而:

Thread.sleep(10*1000);

这段代码将会让调用线程休眠10秒钟。但是,如果你有另一个线程的引用,你现在可以选择使用以下方法之一:

sleepingThread.interrupt();

这将有效地唤醒sleepingThread,使其从10秒的休眠中醒来。

就您的问题而言,在AsyncTask中哪种方法更好,我认为完全取决于您的要求。当然我不知道您的确切代码,但是考虑到您的任务的doInBackground显然正在进行一些睡眠操作,并且您希望能够在任意时间取消任务,Thread.sleep()可能更合适。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接