Android AsyncTask и - PullRequest
       34

Android AsyncTask и

3 голосов
/ 08 ноября 2010

Привет, в моем приложении есть AsyncTask, которая вызывается из OnCreate (), которая извлекает некоторые данные через Интернет и отображает неопределенный индикатор выполнения во время загрузки.

Проблема в том, что при запуске приложения экран остается пустымпока AsyncTask не закончится.Код примерно такой.

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    loadData();
    //Several UI Code   
    startAsyncTasks();
}


 private void startAsyncTasks(){
    new ConnectingTask().execute();
 }

1 Ответ

1 голос
/ 17 марта 2012

OnCreate () выполняется перед отображением действия на экране, поэтому весь процесс загрузки данных выполняется перед отображением действия.

Решением может быть запуск AsyncTask в методе OnStart () вместо OnCreate () (также переопределяется).OnStart () выполняется во время отображения активности на экране (см. Жизненный цикл активности).

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

Вот как это выглядит в моем приложении:

  1. Запущен AsyncTaskв действии OnStart () вместе с отображением диалогового окна
  2. Данные загружаются во внутренний класс с расширением AsyncTask
  3. После загрузки данных диалоговое окно закрывается и инициализируется дальнейшая обработка данных (OnPostExecute ())

Недостатком может быть то, что OnStart () вызывается при первом вызове операции, но также и после его восстановления (например, после минимизации приложения).Таким образом, AsyncTask может выполняться несколько раз в противоположность OnCreate (), который вызывается только один раз - при создании действия (а не при его восстановлении).

Могут также возникнуть некоторые проблемы, если вы выполните тест jUnitо такой деятельности с диалогом в AsyncTask - дайте мне знать, если вы делаете - опубликует какое-то решение

...