OnCreate () выполняется перед отображением действия на экране, поэтому весь процесс загрузки данных выполняется перед отображением действия.
Решением может быть запуск AsyncTask в методе OnStart () вместо OnCreate () (также переопределяется).OnStart () выполняется во время отображения активности на экране (см. Жизненный цикл активности).
Это тот случай, который я реализовал в своем приложении, и он работает.Вы должны показать диалоговое окно прогресса в методе OnStart (), а затем обновить и закрыть его в AsyncTask в нужные моменты.
Вот как это выглядит в моем приложении:
- Запущен AsyncTaskв действии OnStart () вместе с отображением диалогового окна
- Данные загружаются во внутренний класс с расширением AsyncTask
- После загрузки данных диалоговое окно закрывается и инициализируется дальнейшая обработка данных (OnPostExecute ())
Недостатком может быть то, что OnStart () вызывается при первом вызове операции, но также и после его восстановления (например, после минимизации приложения).Таким образом, AsyncTask может выполняться несколько раз в противоположность OnCreate (), который вызывается только один раз - при создании действия (а не при его восстановлении).
Могут также возникнуть некоторые проблемы, если вы выполните тест jUnitо такой деятельности с диалогом в AsyncTask - дайте мне знать, если вы делаете - опубликует какое-то решение