Как обработать AsyncTask во время Экранного Вращения?

Я читал много о том, как сохранить мое состояние экземпляра или как иметь дело с моим действием, уничтожаемым во время экранного вращения.

Кажется, существует много возможностей, но я не выяснил, какой работает лучше всего на получение результатов AsyncTask.

У меня есть некоторые AsyncTasks, которые просто запускаются снова и звонят isFinishing() метод действия и если действие заканчивает их привычка, обновляет что-либо.

Проблема состоит в том, что у меня есть одна Задача, которая делает запрос к веб-сервису, который может перестать работать или успешно выполниться, и перезапуск задачи привел бы к финансовым потерям для пользователя.

Как Вы решили бы это? Каковы преимущества или недостатки возможных решений?

86
задан Janusz 12 April 2010 в 09:17
поделиться

3 ответа

Мое первое предложение - убедиться, что вам действительно нужно, чтобы ваша активность сбрасывалась при повороте экрана (поведение по умолчанию). Каждый раз, когда у меня возникали проблемы с поворотом, я добавлял этот атрибут в тег в AndroidManifest.xml, и все было в порядке.

android:configChanges="keyboardHidden|orientation"

Выглядит это странно, но это передается вашему методу onConfigurationChanged(), если вы его не предоставите, он просто ничего не делает, кроме повторного измерения макета, что кажется совершенно адекватным способом обработки поворота в большинстве случаев.

6
ответ дан 24 November 2019 в 08:07
поделиться

Это самый интересный вопрос, который я видел по Android!!! На самом деле я уже искал решение в течение последних месяцев. До сих пор не решил.

Будьте осторожны, простого переопределения

android:configChanges="keyboardHidden|orientation"

вещей недостаточно.

Рассмотрим случай, когда пользователь получает телефонный звонок во время выполнения вашей AsyncTask. Ваш запрос уже обрабатывается сервером, поэтому AsyncTask ожидает ответа. В этот момент ваше приложение переходит в фоновый режим, потому что приложение "Телефон" только что вышло на передний план. ОС может убить вашу активность, так как она находится в фоновом режиме.

10
ответ дан 24 November 2019 в 08:07
поделиться

Вы можете проверить, как я обрабатываю AsyncTask и изменения ориентации на code.google.com/p/shelves. Существуют различные способы сделать это, один из них, который я выбрал в этом приложении, - это отменить любую запущенную в данный момент задачу, сохранить ее состояние и начать новую с сохраненным состоянием при создании нового Activity. Это легко сделать, он работает хорошо, и в качестве бонуса он заботится о остановке ваших задач, когда пользователь покидает приложение.

Вы также можете использовать onRetainNonConfigurationInstance(), чтобы передать ваш AsyncTask новому Activity (будьте осторожны, чтобы не утечка предыдущего Activity таким образом.)

46
ответ дан 24 November 2019 в 08:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: