¿Cómo puedo mostrar los mensajes de Toast de un hilo?
android
multithreading
android-toast
Arutha
fuente
fuente

Respuestas:
Puede hacerlo llamando a un
Activity'srunOnUiThreadmétodo de su hilo:fuente
Threadreferencia del objetoActivityen elActivity'sonResume. Desarmarlo enActivity'sonPause. Haz ambas cosas bajo unsynchronizedcandado que tanto elActivitycomo elThreadrespeto.Activityinstancia, puede usar una clase de ayuda simple en su lugar, consulte aquí: stackoverflow.com/a/18280318/1891118MyActivity.this.runOnUiThread()funciona bien desde un interiorThread/AsyncTask.Me gusta tener un método en mi actividad llamado al
showToastque puedo llamar desde cualquier lugar ...Luego lo llamo con mayor frecuencia desde dentro
MyActivityen cualquier hilo como este ...fuente
Esto es similar a otras respuestas, sin embargo, actualizado para nuevas apis disponibles y mucho más limpio. Además, no asume que estás en un contexto de actividad.
fuente
Un enfoque que funciona desde prácticamente cualquier lugar, incluso desde lugares donde no tienes una
ActivityoView, es tomar unaHandleral hilo principal y mostrar el brindis:La ventaja de este enfoque es que funciona con cualquiera
Context, incluidosServiceyApplication.fuente
Como esto o esto , con un
Runnableque muestra elToast. A saber,fuente
A veces, tienes que enviar un mensaje desde otro
Threadal hilo de la interfaz de usuario. Este tipo de escenario ocurre cuando no puede ejecutar operaciones de red / IO en el hilo de la interfaz de usuario.El siguiente ejemplo maneja ese escenario.
Runnableel hilo de la interfaz de usuario. Así que publique suRunnablecontrolador enHandlerThreadRunnabley envíelo de vuelta al hilo de la interfaz de usuario y muestre unToastmensaje.Solución:
HandlerThread:requestHandlerresponseHandleryhandleMessagemétodo de anulaciónpostunaRunnabletarea enrequestHandlerRunnablede tareas, llamesendMessagearesponseHandlersendMessageinvocación de resultado dehandleMessageinresponseHandler.Messagey procesarlo, actualizar la interfaz de usuarioCódigo de muestra:
Artículos útiles:
manejarrthreads-y-por-qué-debería-usarlos-en-sus-aplicaciones-de-Android
android-looper-handler-handlerthread-i
fuente
handler.sendMessage();post()Método de llamadahandler.post();runOnUiThread()view.post()fuente
Puede utilizar
Looperpara enviar unToastmensaje. Vaya a este enlace para obtener más detalles.y se llama en su hilo. Es posible que el contexto se
Activity.getContext()obtenga delActivityque tienes que mostrar el brindis.fuente
Hice este enfoque basado en la respuesta de mjaggard:
Me funcionó bien.
fuente
Encontré el mismo problema:
Antes: función onCreate
Después: función onCreate
funcionó.
fuente