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:
Los cambios de configuración se manejan dentro de un solo mensaje en la cola de mensajes del hilo principal.
Tan pronto como
doInBackground()
métododoInBackground()
,AsyncTask
planifica el métodoonPostExecute()
que se invocará en el hilo principal publicando un mensaje en la cola de mensajes del hilo principal.El mensaje de cambio de configuración contendrá el código que invocará los métodos de ciclo de vida de
Fragment
yActivity
(comoonDetach()
yonAttach()
). El mensaje deAsyncTask
contendrá el código que invocará el métodoonPostExecute()
. 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, poronPostExecute()
tanto,onPostExecute()
nunca se puede invocar entre las llamadas aonDetach()
yonAttach()
.
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:
- Se produce un cambio de configuración, el usuario gira el dispositivo. AsyncTask se está ejecutando.
- Fragmento
onDetach()
se llama - Finaliza el
doInBackground()
AsyncTaskdoInBackground()
- AsyncTask
onPostExecute()
se llama - 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?