2015-07-27 2 views
0

У меня есть несколько асинтетов в моем приложении, я хочу выполнить его, когда выполняется определенное условие. Например,Запуск нескольких Asynctask один за другим при выполнении условия

класс TASK1 расширяет AsyncTask ...

класс Task2 расширяет AsyncTask ..

класс Task3 расширяет AsyncTask ...

У меня есть время цикла, который используется для обхода некоторых значения из карты. например:

while(iterator.next()) 

{ 

Map.Entry pair = (Map.Entry) it.next(); 

      String title = pair.getKey().toString(); 

if(title.equals("one")) 

{ 

//execute task1; 

}else if(title.equals("two")) 

{ 

//execute task2; 

} 

etc.. 
} 

Это пример кода я в настоящее время используется. Каждая задача содержит диалог прогресса, который начинается с onPreExcecute() и , уволенных на onPostExecute().

Моя проблема в том, что я хочу выполнять только одну задачу за раз. В моем коде все задачи запускаются одновременно, а диалог выполнения будет перекрываться. Таким образом, есть способ выполнить только одну задачу за раз, Спасибо заранее.

+0

попытайтесь создать в одной асинхронной задаче – Pavya

+3

начните с одной Asynctask, назовите следующую на onPostExecute. – Dhina

+0

сохранить очередь задач, когда первый заканчивается, вызывает следующий в postExe – user3290180

ответ

1

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

Чтобы справиться с проблемой progressbar, создайте глобальный объект progressbar, который может использоваться всеми асинхронными задачами.

Используйте следующую ссылку для проверки состояния AsynTasks. AsynTask Status

0

Основная причина, по которой перекрытие progressDialog запускает многопользовательскую asnyntask. , так что вы начинаете сначала асинтаз, а вызов следующей формы - postExcecutive.

0

У вас есть недоразумение AsyncTask. По умолчанию исполнитель AsyncTask является последовательным исполнителем, что означает, что он будет выполнять задачи по одному в последовательном порядке в определенном процессе. Но почему диалоги процесса отображаются одновременно? После прочтения кода AsyncTask, вы можете найти причину в функции executeOnExecutor:

public final AsyncTask<Params, Progress, Result> executeOnExecutor(Executor exec, 
      Params... params) { 
    mStatus = Status.RUNNING; 
    onPreExecute(); 
    mWorker.mParams = params; 
    exec.execute(mFuture); 
    return this; 
} 

Вы можете обнаружить, что метод onPreExecute вызывается до выполнения, то есть это не серийный называется. Таким образом, диалоги прогресса появляются одновременно.

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

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