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

qwr*_*qwr 4 android

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

new*_*yca 7

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

SystemClock.sleep(10*1000);
Run Code Online (Sandbox Code Playgroud)

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

Thread.sleep(10*1000);
Run Code Online (Sandbox Code Playgroud)

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

sleepingThread.interrupt();
Run Code Online (Sandbox Code Playgroud)

这有效地唤醒了睡眠中的睡眠.

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