En Android se aplican las mismas reglas que en un entorno Java normal. En Java, los hilos no se matan, pero la detención de un hilo se realiza de forma cooperativa . Se le pide al hilo que termine y el hilo puede luego cerrarse con gracia.
A menudo volatile boolean, se usa un campo que el hilo verifica periódicamente y termina cuando se establece en el valor correspondiente.
Yo no me utilizar una booleanpara comprobar si el hilo debe terminar . Si lo usa volatilecomo un modificador de campo, esto funcionará de manera confiable, pero si su código se vuelve más complejo, ya que en su lugar usa otros métodos de bloqueo dentro del whileciclo, podría suceder que su código no termine en absoluto o al menos demore más cuando podria querer.
Ciertos métodos de biblioteca de bloqueo admiten la interrupción.
Cada hilo ya tiene un estado de interrupción de bandera booleana y debe hacer uso de él. Se puede implementar así:
public void run() {
try {
while(!Thread.currentThread().isInterrupted()) {
}
} catch (InterruptedException consumed)
}
}
public void cancel() { interrupt(); }
Código fuente tomado de Java Concurrency in Practice . Dado que el cancel()método es público, puede permitir que otro hilo invoque este método como desee.
También hay un método estático mal nombrado interruptedque borra el estado interrumpido del hilo actual.