thread.sleep和systemclock.sleep有什么区别。哪一个应该在AsyncTask中使用?

时间:2012-09-05 23:05:58

标签: android

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

1 个答案:

答案 0 :(得分:7)

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

SystemClock.sleep(10*1000);

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

Thread.sleep(10*1000);

也会在调用线程中休眠10秒钟。但是如果你有来自另一个线程的休眠线程的引用,你现在可以选择:

sleepingThread.interrupt();

从10秒睡眠中有效唤醒 sleepingThread

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