Tengo un servicio que inicia un subproceso y un ejecutable como tal.Detener/destruir un subproceso
t = new Thread(new Runnable() {
public void run() {
doSomething();
}
});
t.start();
La razón de la rosca es llevar a cabo una tarea asíncrona doSomething(). Por ahora, no nos preocupemos por la otra clase, AsyncTask. Lo probé y no funciona para mi caso. Editar: No puedo usar AsyncTask porque está diseñado solo para el subproceso de UI. Esta pieza de código tiene que operar dentro de un servicio, así pues no, no AsyncTask :(
doSomething() contiene algunas librerías externas por lo que el problema que estoy teniendo es que potencialmente puede ser colgado en uno de los comandos, sin devolver ningún valor (por lo tanto sin la comprobación de errores, incluso se puede hacer)
para evitar esto, voy a querer, en algún punto del tiempo, destruir el servicio.
stopService(new Intent("net.MyService.intent));
esto funciona bien y es fácil de verificar en el teléfono. Sin embargo, el subproceso que se creó anteriormente continuará ejecutándose incluso cuando t El Servicio que engendró es destruido.
Estoy buscando los comandos correctos para insertar en el Servicio onDestroy() que limpiará el hilo por mí.
t.destroy();
t.stop();
se han depreciado y provocan bloqueos de aplicaciones.
Tomé el código de alguna parte
@Override
public void onDestroy() {
Thread th = t;
t = null;
th.interrupt();
super.onDestroy();
}
pero todavía no funciona, el hilo sigue funcionando. ¿Alguna ayuda chicos?
Ese enlace, básicamente, itera todos los problemas y limitaciones que me enfrento. El enlace habla sobre cómo usar interrupt() en lugar de stop(), que es lo que estoy haciendo. El problema con interrupt() es que solo funciona en sleep(), wait() y join(). En mi código, la línea que cuelga no es ninguna de estas, y nunca se recupera, ni siquiera después de una hora. el hilo está atascado en esa línea, y ninguna interrupción puede rescatarlo. – foodman