Unter Android gelten die gleichen Regeln wie in einer normalen Java-Umgebung. In Java werden Threads nicht getötet, aber das Stoppen eines Threads erfolgt auf kooperative Weise . Der Thread wird zum Beenden aufgefordert und der Thread kann dann ordnungsgemäß heruntergefahren werden.
Oft wird ein volatile boolean
Feld verwendet, das der Thread regelmäßig überprüft und beendet, wenn er auf den entsprechenden Wert gesetzt wird.
Ich würde a nicht verwenden boolean
, um zu überprüfen, ob der Thread beendet werden soll . Wenn Sie volatile
als Feldmodifikator verwenden, funktioniert dies zuverlässig. Wenn Ihr Code jedoch komplexer wird und stattdessen andere Blockierungsmethoden innerhalb der while
Schleife verwendet, kann es vorkommen, dass Ihr Code überhaupt nicht beendet wird oder zumindest länger dauert als Sie könnte wollen.
Bestimmte blockierende Bibliotheksmethoden unterstützen die Unterbrechung.
Jeder Thread hat bereits einen Status eines unterbrochenen Booleschen Flags, den Sie verwenden sollten. Es kann folgendermaßen implementiert werden:
public void run() {
try {
while(!Thread.currentThread().isInterrupted()) {
}
} catch (InterruptedException consumed)
}
}
public void cancel() { interrupt(); }
Quellcode aus Java Concurrency in der Praxis . Da die cancel()
Methode öffentlich ist, können Sie einen anderen Thread diese Methode wie gewünscht aufrufen lassen.
Es gibt auch eine schlecht benannte statische Methode, interrupted
die den unterbrochenen Status des aktuellen Threads löscht.