Ответ 1
Невозможно вызвать onPostExecute()
между Fragment#onDetach()
и Fragment#onAttach()
во время изменения конфигурации. Причины этого утверждения трижды:
-
Изменения конфигурации обрабатываются внутри одного сообщения в очереди сообщений основного потока.
-
Как только метод
doInBackground()
возвращается,AsyncTask
рассылает методonPostExecute()
, который вызывается в основном потоке, отправляя сообщение в очередь сообщений основного потока. -
Сообщение об изменении конфигурации будет содержать код, который будет вызывать методы жизненного цикла
Activity
иFragment
(например,onDetach()
иonAttach()
). СообщениеAsyncTask
будет содержать код, вызывающий методonPostExecute()
. Поскольку основной поток обрабатывает сообщения в очереди сообщений последовательно, невозможно, чтобы оба сообщения выполнялись одновременно, и поэтомуonPostExecute()
никогда не может быть вызвано между вызовамиonDetach()
иonAttach()
.
Прочтите мой ответ Дугу Стивенсону в этой теме для более подробного объяснения (включая ссылки на исходный код, подтверждающий претензию).