Обновления интерфейса через изменения конфигурации: странная точка
Я опытный разработчик для Android, и это позор, что я все еще неэффективно борюсь с фундаментальными проблемами, такими как постоянные изменения пользовательского интерфейса при изменениях конфигурации.
Я знаю, что это слишком хорошо известная проблема, и о ней много литературы. Рекомендуемое решение заключается в setRetainInstance(true)
фрагмент без пользовательского интерфейса:
https://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html
Лучшая практика: AsyncTask во время смены ориентации
Ради полноты позвольте мне составить сценарий. У вас есть AsyncTask
который выполняет сетевой запрос и должен обновить пользовательский интерфейс в onPostExecute()
Я вижу некоторые проблемы с предлагаемым решением:
- Предлагаемое решение говорит о том, что
onPostExecute()
гарантированно не будет вызываться во время между вызовамиonDetach()
и следующийonAttach()
но что, если AsyncTask возвращается рано (после активностиonPause()
и перед звонкомonDetach()
). ЕслиonPostExecute()
выполняется в течение периода, так какonSaveInstanceState()
будет вызвано, любое обновление в представлениях не будет сохраняться при перезапуске активности. - Во-вторых, если
AsyncTask
возвращает так, чтоonPostExecute()
выполняется до вызова ActivityonCreate()
тогда представления не будут инициализированы для каких-либо обновлений представлений, которые будут еще переданы.
Есть ли какое-либо эффективное решение этой проблемы, которое решает проблему утечек памяти и сохранения состояния при изменениях конфигурации?