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