Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Orden de envío de la cola de mensajes de Thread de interfaz de usuario de Android

Mientras trabajamos con Fragmentos de retención en Android para mantener un AsyncTask durante los cambios de configuración, lo cual supongo que es el mejor enfoque, algunas dudas aparecen en mi mente acerca del orden de invocación de Message Queue de Thread de UI.

Ejemplo: Imagine este escenario:

  1. Configuración Se produce un cambio, el usuario gira el dispositivo. AsyncTask se está ejecutando.
  2. Fragmento onDetach() se llama
  3. Método de AsyncTask doInBackground() finaliza
  4. AsyncTask onPostExecute() se llama
  5. Fragmento onAttach() se llama

Así puede UI Thread Message Queue ser así:

Cola superior -> onDetach () | OnPostExecute () | OnAttach ()

Sé que no puede, la llamada a onPostExecute() va a esperar hasta que el cambio de configuración se completa, por lo que sé, pero ¿cómo funciona? ¿Se ejecutan consecutivamente las llamadas de Actividades, Fragmentos de ciclos de vida?

  • Android: RunOnUiThread vs AsyncTask
  • Android AsyncTasks Cómo comprobar si la actividad aún se está ejecutando
  • CalledFromWrongThreadException: Sólo el subproceso original que creó una jerarquía de vistas puede tocar vistas
  • ¿Debo usar la clase AsyncTask dentro de la Actividad de Extensión de MainActivity?
  • Android AsyncTask para operaciones de larga duración
  • Android: ¿cómo esperar AsyncTask para terminar en MainThread?
  • Android AsyncTask límites de los hilos?
  • Clase común para AsyncTask en Android?
  • One Solution collect form web for “Orden de envío de la cola de mensajes de Thread de interfaz de usuario de Android”

    No es posible que onPostExecute() sea ​​llamado entre Fragment#onDetach() y Fragment#onAttach() durante un cambio de configuración. El razonamiento detrás de esta afirmación es triple:

    1. Los cambios de configuración se manejan dentro de un solo mensaje en la cola de mensajes del subproceso principal.

    2. Tan pronto como el método doInBackground() devuelve, el AsyncTask programa el método onPostExecute() para invocarse en el subproceso principal publicando un mensaje en la cola de mensajes del subproceso principal.

    3. El mensaje de cambio de configuración contendrá el código que invocará los métodos de ciclo de vida de Activity y Fragment (como onDetach() y onAttach() ). El mensaje de AsyncTask contendrá el código que invocará el método onPostExecute() . Dado que el subproceso principal procesa secuencialmente mensajes en su cola de mensajes, es imposible que los dos mensajes se ejecuten al mismo tiempo y, por tanto, onPostExecute() nunca se puede invocar entre las llamadas a onDetach() y onAttach() .

    Lea mi respuesta a Doug Stevenson en este hilo para una explicación más detallada (incluyendo enlaces al código fuente que demuestran la reclamación).

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