¿Cómo termino HandlerThreads?

Siguiendo los ejemplos de Googles para usar un servicio, he creado un par de hilos como éste. No puedo utilizar IntentService, porque estoy haciendo algo que implica esperar a callbacks.

Sin embargo, no sé cómo terminar un hilo iniciado de esta manera. Según lo entiendo, los subprocesos terminan automáticamente cuando el método run () devuelve. Sin embargo, este tipo de subproceso no tiene un método de ejecución. Mis hilos están goteando – se mantienen vivos después de stopSelf ().

@Override public void onCreate() { HandlerThread thread = new HandlerThread("ServiceStartArguments", android.os.Process.THREAD_PRIORITY_BACKGROUND); thread.start(); HandlerThread thread2 = new HandlerThread("CallbackHandling", android.os.Process.THREAD_PRIORITY_BACKGROUND); thread2.start(); mServiceLooper = thread.getLooper(); mCallbackLooper = thread2.getLooper(); mServiceHandler = new MyHandler(mServiceLooper); mCallbackHandler = new Handler(mCallbackLooper); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); // For each start request, send a message to start a job and deliver the // start ID so we know which request we're stopping when we finish the job Message msg = mServiceHandler.obtainMessage(); msg.arg1 = startId; mServiceHandler.sendMessage(msg); mMainThreadHandler=new Handler(); // If we get killed, after returning from here, restart return START_STICKY; } private final class MyHandler extends Handler { public MyHandler(Looper looper) { super(looper); } @Override public void handleMessage(Message msg) { cycle(); // Stop the service using the startId, so that we don't stop // the service in the middle of handling another job stopSelf(msg.arg1); } } protected void cycle() { ... mCallbackHandler.post(new Runnable(){ public void run(){ goAskForSomeCallbacks(); } }); try { Thread.sleep(GIVE_UP_TIME); } catch (InterruptedException e){ //The callback will interrupt this thread to stop it from waiting Log.d(TAG,"Got early callback, stop waiting."); } Thread.interrupted(); //clear the interrupt doStuff(); } 

Intente llamar al método quit en los Loopers correspondientes.

Puede llamar al método quit en los hilos del manejador.

p.ej

 thread.quit(); thread2.quit(); 

Forzar el cierre de la aplicación lo hace, pero de lo contrario sólo seguir adelante por su cuenta.

  • ¿Hay una manera de pasar parámetros a un Runnable?
  • ¿Cómo evitar la espera en el hilo principal cuando se añaden los encabezados a las solicitudes de retrofit?
  • ¿Es legal llamar al método de inicio dos veces en el mismo hilo?
  • Cómo llamar a otra actividad después de cierto límite de tiempo
  • ¿Es posible usar AsyncTask en una clase de servicio?
  • Corrección multihilo: Utilización de bloqueo sincronizado
  • Cola de hilos de Android
  • Android AsyncTask permanece en estado de ejecución después de completar
  • Los anuncios de Android ralentizan mucho el rendimiento
  • Android: forma estándar de hacer correr un hilo cada segundo
  • Obtener hilo por nombre
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.