Cómo detener Handler en Android?

En Mi aplicación mi controlador no se detiene. ¿Cómo puedo parar al manejador?
Continúa comenzando después de cerrar la actividad. ¿Que puedo hacer?

El código es:

handler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); if(i<max) { evnetChangedisplay(i); i++; handler.sendEmptyMessageDelayed(0, 5000); } else { i = 0; handler.sendEmptyMessageDelayed(0,0000); } } }; handler.sendEmptyMessageDelayed(0,000); 

Considerar:

 private Handler myHandler= new Handler(){ @Override public void handleMessage(Message msg){ switch(msg.what){ case 0: this.removeMessages(0); messageSendingCodeWhat0(); break; default: super.handleMessage(msg); break; } } }; 

Parece que la actividad finaliza su ciclo de vida antes de que el Handler ejecute el código. Puede administrar un handler.post (runnable) creando un miembro de instancia para el manejador y ejecutable, luego administrar el manejador en los métodos de Lifecycle de actividad.

 private Handler myHandler; private Runnable myRunnable = new Runnable() { @Override public void run() { //Do Something } }; 

Inicie el runnable con handler.post.

 protected void onStart() { super.onStart(); myHandler = new Handler(); myHandler.post(myRunnable); } 

Si el runnable no se ha ejecutado antes de que se llame onStop, no queremos ejecutarlo. Elimine la devolución de llamada en el método onStop:

 protected void onStop() { super.onStop(); mHandler.removeCallbacks(myRunnable); } 

Use removeCallbacks o removeCallbacksAndMessages

Nunca se detiene porque siempre estás enviando un mensaje! Creo que desea eliminar handler.sendEmptyMessageDelayed(0,0000); , Que en realidad no tiene sentido (¿estás retrasando un mensaje de 0 milisegundos?).

Un manejador es simplemente una interfaz para el bucle de eventos de un subproceso. Así que si detiene el hilo entonces "detener" el Handler.

Suponiendo que su Handler es para un hilo de fondo.

Aquí está un ejemplo donde quit () está diseñado para enviar un método looper.quit () al bucle de eventos que detendrá el hilo y el Handler.

 public class MyThread extends Thread { private Handler m_handler; @Override public void run() { Looper.prepare(); m_handler = new Handler(); Looper.loop(); } // Simply post the quit runnable to the thread's event loop public void quit() { m_handler.post(new QuitLooper()); } // Inner Runnable which can be posted to the handler class QuitLooper implements Runnable { @Override public void run() { Looper.myLooper().quit(); } } } 

Por lo tanto, en los métodos onPause () o onStop () de su actividad, simplemente llame a myThread.quit ().

Su Handler (si está implementado de este modo) estará activo mientras la instancia Looper esté activa, lo cual es para todo el ciclo de vida del hilo (que tiene poco que ver con el ciclo de vida de la actividad).

Si desea que el manejador deje de volver a activarse, debe cuidarlo usted mismo.

Enviando un mensaje de 0-delayed a sí mismo parece ligeramente extraño, de todos modos. ¿Qué estás tratando de lograr, en realidad?

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.