¿El postDelayed hace que el mensaje salte al frente de la cola?
Estaba buscando en los documentos de Android para postDelayed post documentación retrasada
Esto es similar a otra pregunta – https://stackoverflow.com/questions/25820528/is-postdelayed-relative-to-when-message-gets-on-the-queue-or-when-its-the-actual- I tuve un tiempo atrás, pero es una situación diferente (y redactado mucho más claro en mi mente)
- Compruebe si trabaja AsyncTask
- Multithreading en Android
- ¿Es seguro guardar una referencia a un hilo en un singleton?
- android Espere entre actualizaciones de GridView
- Cargando imagen de forma sincrónica con Glide
Básicamente heres lo que dicen los docs para que este método – "Hace que el Runnable se agregue a la cola de mensajes, que se ejecutará después de la cantidad de tiempo especificado transcurrido.El runnable se ejecutará en el hilo de la interfaz de usuario.
Sé que cada subproceso tiene una cola de mensajes, looper y manejador asociado con él. – ¿Cuál es la relación entre Looper, Handler y MessageQueue en Android? . En términos de "ser ejecutado después de la cantidad de tiempo especificada", si pasa en 0 como el argumento para delayMillis y todavía hay mensajes en la cola de mensajes, el mensaje con 0 omitirá el resto de los mensajes (que están actualmente en frente de él) en la cola de mensajes para ser manejado directamente por el looper? Sé que el looper enviará el mensaje al manejador handleMessage () method- de cómo el Looper sabe enviar el mensaje al encargado? . Yo probaría esto por mi cuenta, pero realmente no sé cómo lo haría.
- Cómo administrar Loopers y Threads (el hilo no muere más!)
- Voleadas asincrónicas en android SyncAdapter
- RunOnUiThread No definido para la clase
- Cómo enlazar una actividad a un servicio y controlar y administrar el servicio desde la actividad
- ExecutorService parece estar ejecutando el hilo en la interfaz de usuario?
- Diferencia entre AsyncTask y Thread / Runnable
- Tacto largo en una superficieView (android)
- Android: ¿puedes acceder a los miembros de la clase AsyncTask en DoInBackground?
La respuesta corta es – no, hacer un postDelayed
no salta delante de otros trabajos no retrasados en la cola.
Tanto post
como postDelayed
llaman sendMessageDelayed
, post
utiliza un retardo de 0. Así, post
y postDelayed
con un retardo cero son equivalentes. (Véase la fuente Handler
, comenzando alrededor de la línea 324). sendMessageDelayed
indica que el mensaje en poner en la cola después de todas las solicitudes pendientes. La razón es que cada mensaje se pone en cola con el tiempo que fue en colada más un retraso opcional. La cola está ordenada por este valor de tiempo. Si enqueue un nuevo mensaje sin demora saltará (se colocará delante de) los mensajes retrasados que todavía no han alcanzado su tiempo de entrega, pero no delante de los mensajes pendientes (aquellos que han pasado su tiempo de entrega, pero aún no han sido entregado)
Como nota secundaria, si desea que el comportamiento que una solicitud omite solicitudes pendientes, puede utilizar postAtFrontOfQueue
, pero asegúrese de leer y comprender la advertencia de que sólo se utiliza en circunstancias especiales.