¿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
'srunOnUiThread
método de su hilo:fuente
Thread
referencia del objetoActivity
en elActivity
'sonResume
. Desarmarlo enActivity
'sonPause
. Haz ambas cosas bajo unsynchronized
candado que tanto elActivity
como elThread
respeto.Activity
instancia, 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
showToast
que puedo llamar desde cualquier lugar ...Luego lo llamo con mayor frecuencia desde dentro
MyActivity
en 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
Activity
oView
, es tomar unaHandler
al hilo principal y mostrar el brindis:La ventaja de este enfoque es que funciona con cualquiera
Context
, incluidosService
yApplication
.fuente
Como esto o esto , con un
Runnable
que muestra elToast
. A saber,fuente
A veces, tienes que enviar un mensaje desde otro
Thread
al 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.
Runnable
el hilo de la interfaz de usuario. Así que publique suRunnable
controlador enHandlerThread
Runnable
y envíelo de vuelta al hilo de la interfaz de usuario y muestre unToast
mensaje.Solución:
HandlerThread
:requestHandler
responseHandler
yhandleMessage
método de anulaciónpost
unaRunnable
tarea enrequestHandler
Runnable
de tareas, llamesendMessage
aresponseHandler
sendMessage
invocación de resultado dehandleMessage
inresponseHandler
.Message
y 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
Looper
para enviar unToast
mensaje. Vaya a este enlace para obtener más detalles.y se llama en su hilo. Es posible que el contexto se
Activity.getContext()
obtenga delActivity
que 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