2012-05-11 1 views
2

В моем проекте Я хочу параллельно загружать данные из 3 разных URL-адресов (webservice) при загрузке страницы.Ручка single progressdialog с параллельной множественной асинтемой

Для этого я использую 3 разных асинтеза для загрузки данных.

Я хочу показать диалоговое сообщение о ходе работы как «загружаемое» при запуске первой асинтезы и закрытии диалогового окна после завершения последней асинтеза (пока не будет завершено выполнение 3 задач).

Пожалуйста, расскажите мне, как справиться с этой ситуацией.

ответ

4

Есть разные способы справиться с этой ситуацией.

  1. Вы можете использовать переменную-счетчик инициализирован с числом задач, и этот счетчик получает уменьшается, когда AsyncTask завершена. Когда счетчик равен 0, ProgressDialog отклоняется. Вы можете выполнить этот декремент и проверить отклонение диалога прогресса в каждом из AysncTask's onPostExecute.

  2. Возможно, вам не нужны 3 разных AsyncTask s. Вы можете использовать один AsyncTask с CountDownLatch для синхронизации Thread.

+0

thank u rajesh, я получу успех с логикой u'r, я создаю одну глобальную переменную в деятельности и каждый раз, когда я увеличиваю значение в postexecute() и проверю, доходит ли значение до «3», я отклоняю диалог. –

0

Вы можете сделать это, как показано ниже:

//define progress dialog object globally in your parent class 
ProgressDialog pd = null; 

AsyncTask1onPreExecute:

pd = ProgressDialog.show(this, "title", "loading", true); 

AsyncTask2:

//do nothing 

syncTask3onPostExecute:

if(pd!=null) 
    pd.dismiss(); 
+1

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

+0

не Вы начинаете вторую задачу onPostExecute первого-х? – waqaslam

+1

нет, я хочу запустить 3 asyntask одновременно. –

1

Один из способов сделать это вы можете создать интерфейс OnThreadFinishListeneronThreadFinish() способом) и есть ваша деятельность его реализации. Все ваши AsyncTask должны зарегистрироваться самому слушателю, поэтому каждый раз, когда поток заканчивается, он вызывает метод onThreadFinish. в методе onThreadFinish он должен проверить, есть ли поток в фоновом режиме (что-то вроде if (asyncTask1.getStatus() == AsyncTask.Status.RUNNING || asyncTask2.getStatus() == AsyncTask.Status.RUNNING ...))

Если все являются ложными, вы можете отклонить progress dialog.

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