Problema en Handler con mensajes en android

Estoy utilizando los manejadores en mi aplicación, en una pantalla haciendo clic en un botón se llamará un conjunto de códigos.Para invocar ese conjunto de código estoy enviando mensajes al manejador y anulado el método de mensajes manejar. La primera vez que haces clic en el botón el manejador funciona perfectamente y se ejecuta el conjunto de código. Cuando hice clic en el botón por segunda vez estoy recibiendo la siguiente excepción.

05-03 09:45:25.703: ERROR/AndroidRuntime(1971): FATAL EXCEPTION: main 05-03 09:45:25.703: ERROR/AndroidRuntime(1971): android.util.AndroidRuntimeException: { what=1 when=7381217 obj=android.app.AlertDialog@462b5c58 } This message is already in use. 05-03 09:45:25.703: ERROR/AndroidRuntime(1971): at android.os.MessageQueue.enqueueMessage(MessageQueue.java:171) 05-03 09:45:25.703: ERROR/AndroidRuntime(1971): at android.os.Handler.sendMessageAtTime(Handler.java:457) 05-03 09:45:25.703: ERROR/AndroidRuntime(1971): at android.os.Handler.sendMessageDelayed(Handler.java:430) 05-03 09:45:25.703: ERROR/AndroidRuntime(1971): at android.os.Handler.sendMessage(Handler.java:367) 05-03 09:45:25.703: ERROR/AndroidRuntime(1971): at com.mysnob.utils.MessageDialog$8.onClick(MessageDialog.java:93) 05-03 09:45:25.703: ERROR/AndroidRuntime(1971): at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:158) 05-03 09:45:25.703: ERROR/AndroidRuntime(1971): at android.os.Handler.dispatchMessage(Handler.java:99) 05-03 09:45:25.703: ERROR/AndroidRuntime(1971): at android.os.Looper.loop(Looper.java:144) 05-03 09:45:25.703: ERROR/AndroidRuntime(1971): at android.app.ActivityThread.main(ActivityThread.java:4937) 05-03 09:45:25.703: ERROR/AndroidRuntime(1971): at java.lang.reflect.Method.invokeNative(Native Method) 05-03 09:45:25.703: ERROR/AndroidRuntime(1971): at java.lang.reflect.Method.invoke(Method.java:521) 05-03 09:45:25.703: ERROR/AndroidRuntime(1971): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 05-03 09:45:25.703: ERROR/AndroidRuntime(1971): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 05-03 09:45:25.703: ERROR/AndroidRuntime(1971): at dalvik.system.NativeStart.main(Native Method) 

Puedo entender que mientras que envía el mismo mensaje otra vez estoy consiguiendo esta excepción. Pero no sé cómo resolver este problema, si alguien sabe por favor me ayude.

Gracias,

Rajapandian

Nunca debe reutilizar un Mensaje obj. Recuerde que debe enviar un nuevo Mensaje nuevo cada vez que envíe un mensaje si necesita enviar mensaje de nuevo y de nuevo.

Hay un método de ayuda que hace una copia de su mensaje. Con esto puede enviar la copia de su mensaje original en lugar de volver a enviar el mismo objeto (que fallaría si el anterior se sigue utilizando).

 public static Message obtain (Message orig); 

Otros sugieren eliminar el mensaje del Handler y volverlo a enviar. Podría resolver la excepción, pero es poco probable que lo desee. Eliminar y reenviar puede hacer que los mensajes no entregados se pierdan. Por eso sugiero hacer una copia de su mensaje.

Compruebe sus mensajes y asegúrese de no enviar ninguno de ellos dos veces.

ACTUALIZAR:

Y para dejarlo claro … usted puede enviar mensajes con el mismo what (u otros parámetros iguales) tantas veces como usted desea. Lo único que tienes que estar seguro es hacer un mensaje nuevo cada vez que envías un mensaje. No tiene que quitar nada, se agregará a la cola de mensajes del manejador.

Necesita quitar mensajes de su manejador. Vea mi ejemplo a continuación: Yo uso este controlador para enviar mensajes a mi diálogo (mDialog)

 /** * this property will help send messages to the dialog */ Handler handler = new Handler() { @Override public void handleMessage(Message msg) { mDialog.setMessage((String) msg.obj); removeMessages(0); //this is very important } }; 
  • Problemas para escribir la memoria interna de Android
  • Android: Causado por: android.os.NetworkOnMainThreadException
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.