我发现如果在运行中退出一个活动,而异步任务在执行一半时,在尝试重新启动该活动时,我必须等待先前的异步任务完成,然后新的异步任务才会开始。我尝试了线程睡眠和系统时钟睡眠,结果都一样。这是有道理的,因为我猜测我关闭和打开的线程是相同的。有没有办法在用户退出活动时仅取消异步任务?因为这样,第二次用户进入同一活动时就不必等待上一个任务完成了。
我在onPause()中尝试了asyntask.cancel(true),但它不起作用,仍然出现了相同的问题。
SystemClock.sleep(10*1000);
使用sleep函数可以让调用线程休眠10秒钟,这就是它的作用,你需要等待。而:
Thread.sleep(10*1000);
这段代码将会让调用线程休眠10秒钟。但是,如果你有另一个线程的引用,你现在可以选择使用以下方法之一:
sleepingThread.interrupt();
这将有效地唤醒sleepingThread,使其从10秒的休眠中醒来。
就您的问题而言,在AsyncTask中哪种方法更好,我认为完全取决于您的要求。当然我不知道您的确切代码,但是考虑到您的任务的doInBackground显然正在进行一些睡眠操作,并且您希望能够在任意时间取消任务,Thread.sleep()可能更合适。