AsyncTask
- отличная вещь для запуска сложных задач в другом потоке.
Но когда происходит изменение ориентации или другое изменение конфигурации, пока AsyncTask
все еще работает, текущий Activity
уничтожается и перезапускается. И поскольку экземпляр AsyncTask
связан с этим действием, он терпит неудачу и вызывает окно сообщения "принудительное закрытие".
Итак, я ищу какую-то "лучшую практику", чтобы избежать этих ошибок и предотвратить сбой AsyncTask.
То, что я видел до сих пор:
- Отключить изменения ориентации. (Не уверен, что вы должны справиться с этим.)
- Предоставление возможности этой задачи выжить и обновить ее с помощью нового экземпляра активности через
onRetainNonConfigurationInstance
- Просто отмените задачу, когда
Activity
будет уничтожен и перезагрузится, когда снова будет созданActivity
. - Привязка задачи к классу приложения вместо экземпляра активности.
- Некоторые методы, используемые в проекте "shelves" (через onRestoreInstanceState)
Некоторые примеры кода:
Android AsyncTasks во время вращения экрана, часть I и Часть II
Можете ли вы помочь мне найти наилучший подход, который лучше всего решает проблему и ее легко реализовать? Сам код также важен, поскольку я не знаю, как правильно его решить.