Меня это некоторое время беспокоило. Как правильно обрабатывать изменения ориентации экрана, когда у меня работает отдельный Thread
/ AsyncTask
? В настоящее время у меня есть
android:configChanges="orientation|keyboard|keyboardHidden"
по моему AndroidManifest.xml
, но это не очень поощряется :
Примечание: Следует избегать использования этого атрибута и использовать его только в качестве крайней меры. Пожалуйста, прочитайте Обработка изменений времени выполнения для получения дополнительной информации о том, как правильно обрабатывать перезапуск из-за изменения конфигурации.
Кроме того, в эмуляторе 2.3 он работает при переключении на landscape
, но переключение обратно на portrait
не удается.
Теперь, причина, по которой я использую configChanges
, заключается в том, что когда пользователь меняет ориентацию, у меня может быть AsyncTask
, работающий с некоторым сетевым трафиком, и я не хочу, чтобы он останавливался.
Есть ли другой способ сделать это, или есть способ исправить 2.3, чтобы переключиться обратно в портрет?
Я знаю о onRetainNonConfigurationInstance
, но я не уверен, что было бы неплохо "сохранить" экземпляр AsyncTask
, главным образом потому, что класс, расширяющий AsyncTask
, не является статическим (поэтому он привязан к Activity
) - так и должно быть, потому что в onPostExecute()
он вызывает методы из экземпляра Activity
.