2013-02-13 3 views
3

Я смущен задачей async. Что мне нужно делать, когда моя активность перезагружается? В моей деятельности onCreate() запускает задачу async. Я знаю, что активность перезапускается, когда требуется андроид (т. Е. Изменение ориентации или другое). У меня нет проблем с этим ... и я думаю, что перезапуск новой задачи async приемлемо.Запуск задачи при выполнении задачи асинхронной работы

Тем не менее я не знаю, что происходит с моей предыдущей задачей async. Я его уничтожил?

Мой второй вопрос: что делать, если у меня есть прогрессDialog в моей предыдущей задаче. Должен ли я отклонять этот диалог (и как)?

+0

http://logc.at/2011/11/08/the-hidden-pitfalls-of-asynctask/ – baboo

+0

Ваш первый первый вопрос «Что мне делать, когда моя активность перезагружается?» Вы должны вызвать метод YourAsyncTask.execute() внутри метода onResume(). Если вы меняете ориентацию, я думаю, что лучшее решение - это хранить ваши данные, а не уничтожать вашу AsyncTask и выполнять ее снова. Чтобы отменить свой прогрессDialog, просто вызовите YourAsyncTask.cancel (true); – Martin

+0

Progress Dialogs s * cks ... и вам следует избегать em ... http://developer.android.com/guide/topics/ui/dialogs.html (поиск «Избегайте ProgressDialog») – Selvin

ответ

2

Нет, ваш Asynctask закончится вашей деятельностью, а также вашим progressDialog. Когда ваша деятельность вызывает onRestart(), она должна сначала пройти через и onStop, что уничтожит вашу деятельность, но не ваше приложение.

Для получения дополнительной информации о деятельности - http://developer.android.com/reference/android/app/Activity.html

Кроме того, было бы безопаснее отменить Asynctask, а также установить progressDialog к нулю.

От Asynctask документации

A task can be cancelled at any time by invoking cancel(boolean). Invoking this method will cause subsequent calls to isCancelled() to return true. After invoking this method, onCancelled(Object), instead of onPostExecute(Object) will be invoked after doInBackground(Object[]) returns. To ensure that a task is cancelled as quickly as possible, you should always check the return value of isCancelled() periodically from doInBackground(Object[]), if possible (inside a loop for instance.)

0

вы должны сохранить экземпляр деятельности и при перезагрузке вашей деятельности вы должны возобновить свою деятельность с этим экземпляром, используйте эту ссылку: Saving some data on orientation change in Android уа вы должны dissmis что диалог.

Смежные вопросы