在Android上应用相同的规则作为一个正常的Java环境。 Java线程不会被终止,但是线程的停止是以合作方式完成的。线程被要求终止,然后线程可以优雅地关闭。
通常一个volatile boolean
字段用于该线程周期性地检查,并且当它被设置为相应的值终止。
我不会使用boolean
检查线是否应终止。如果您使用volatile
作为现场修改,这将工作可靠,但如果你的代码变得更加复杂,对于而是使用while
环内的其他阻止方法,它可能发生,你的代码将不是在所有或至少终止你可能需要更长的需要更长的时间。
某些阻断库方法支持中断。
每个线程都有已经是布尔标志中断状态,你应该利用它。它可以这样实现:
public void run() {
try {
while(!Thread.currentThread().isInterrupted()) {
// ...
}
} catch (InterruptedException consumed)
/* Allow thread to exit */
}
}
public void cancel() { interrupt(); }
源代码取自Java Concurrency in Practice。由于cancel()
方法是公开的,因此您可以让另一个线程根据需要调用此方法。
还有一个名为不佳静态方法interrupted
它清除当前线程的中断状态。
AsyncTask并不是中断机制的替代品,它更像是一种与UI交互的工具。正如我在回答中指出的那样,如果您希望在执行期间能够停止它,您仍然必须在AsyncTask中实现与任何公共线程相同的机制。 – Malcolm 2011-12-14 14:45:15