2012-03-14 17 views
6

cómo detener todos los subprocesos de trabajo en ejecución en una aplicación de Android sin detener el hilo principal?Cómo detener todos los subprocesos de trabajo en la aplicación de Android

¿Algún ejemplo para esto?

+0

¿Qué quiere decir con detener el hilo principal? ¿Qué quiere decir con los hilos de trabajo? – Blackbelt

+0

¿Has intentado buscar algo relacionado? StackOverflow tiene una buena herramienta de búsqueda.Su pregunta no es fácil de entender, por favor explique. –

Respuesta

1

en Java, no te suministrar el método para detener hilo.

sólo se puede interrupt hilo, pero el mosto hilo en el estado que se puede interrumpir, como sleep, wait, etc ...

o puede utilizar algunos trucos para hacer la excepción tiro hilo , como:

1.si el hilo está conectado a la red, desea detener el hilo, puede cerrar la conexión de red, lanzará la excepción io;

2.si el hilo se lee el archivo, puede cerrar la secuencia para lanzar ioexception;

3.if el hilo es consultar la base de datos, se puede cerrar la base de datos

por lo que dependen de su trabajo hilo.

1

En realidad, el hilo tiene el método stop(), por lo que puede revisar todos los hilos de trabajo y llamar a este método en cada uno.

La pregunta es "¿dónde obtener la lista de hilos de trabajo?" La mejor solución es almacenar esta lista en algún lugar a nivel de aplicación, es decir, cada vez que está creando un hilo de trabajo, póngalo en una lista especial. Esta es la mejor solución porque usted y solo usted sabe que el hilo es el hilo "trabajador".

Pero, en teoría, incluso puede descubrir su aplicación dinámicamente y recuperar los hilos. Hay un método estático Thread.enumerate(Thread[] threads) que llena la matriz proporcionada. Pero, ¿cómo saber cuántos hilos se están ejecutando ahora? Use Thread.activeCount().

Thread[] threads = new Thread[Thread.activeCount()]; 
Thread.enumerate(threads); 
for (Thread t : threads) { 
    if (isWorkerThread(t)) { 
     t.stop(); 
    } 
} 

Depende de usted identificar sus hilos de trabajo. Por ejemplo, puede usar el nombre del hilo o el seguimiento de pila del hilo para esto.

PERO es un delito llamar al método obsoleto stop(). Consulte javadoc de este método para leer sobre los motivos.

El método "correcto" es implementar un elegante mecanismo de apagado en la capa de aplicación. Cada hilo debe verificar alguna bandera que indique si el hilo debe cerrarse y cuándo el indicador es verdadero, simplemente regrese del método run(). En este caso, es muy simple cerrar sus hilos de trabajo: simplemente establezca el valor de este indicador en verdadero y los hilos terminarán por sí mismos. Esta es la solución "correcta".

Cuestiones relacionadas