在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