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 booleanFeld 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 volatileals Feldmodifikator verwenden, funktioniert dies zuverlässig. Wenn Ihr Code jedoch komplexer wird und stattdessen andere Blockierungsmethoden innerhalb der whileSchleife 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, interrupteddie den unterbrochenen Status des aktuellen Threads löscht.