studio programacion herramientas fundamentos con avanzado aplicaciones android android-asynctask

programacion - manual de android en pdf



Orden de envĂ­o de la cola de mensajes del hilo de la interfaz de usuario de Android (1)

No es posible onPostExecute() a onPostExecute() entre Fragment#onDetach() y Fragment#onAttach() durante un cambio de configuración. El razonamiento detrás de este reclamo es triple:

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

  2. Tan pronto como doInBackground() método doInBackground() , AsyncTask planifica el método onPostExecute() que se invocará en el hilo principal publicando un mensaje en la cola de mensajes del hilo principal.

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

Lea mi respuesta a Doug Stevenson en este hilo para obtener una explicación más detallada (incluidos enlaces al código fuente que prueban el reclamo).

Mientras trabajo con retención de fragmentos en Android para mantener una AsyncTask durante los cambios de configuración, lo que supongo que es el mejor enfoque, algunas dudas aparecen en mi mente sobre el orden de invocación de Message Queue de UI Thread.

Ejemplo: imagina este escenario:

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

Entonces, ¿puede UI Thread Message Queue ser así?

Cola superior -> onDetach () | onPostExecute () | onAttach ()

Sé que no puede, la llamada a onPostExecute() esperará hasta que se complete el cambio de configuración, hasta donde yo sé, pero ¿cómo funciona eso? ¿Las llamadas de Actividades, Fragmentos, ciclos de vida, se ejecutan consecutivamente?