2015-01-07 4 views
0

У меня есть 10 asynctask, и я хотел бы синхронизировать их все один за другим вместе с нулевой проверкой. Если sqlite_cursor_array имеет нулевое значение, тогда он должен выполнить следующую асинхронную или ждать текущего asynctask, чтобы закончить так технически, только одна asynctask будет выполняться в данный момент времени. Я попытался заставить ее работать с приведенным ниже кодом. Но я не уверен, что он ждет, когда одна асинтетика будет finsih, затем перейдите к другой. Не синхронизирует правильно, и я не знаю, правильно ли я это делаю? Благодаряsync 10 asynctask поочередно один за другим в android

  async1 async1_test = new async1(); 
      async1_test.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); 

          if(async1_test.getStatus() == AsyncTask.Status.FINISHED){ 
           /// 
         async2 async2_test = new async2(Sync.this,getjsonarray_sqlite1); 
         async2_test.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); 
         if(async2_test.getStatus() ==AsyncTask.Status.FINISHED){ 

       async3 async3_test = new async3(Sync.this,getjsonarray_sqlite2); 
        async3_test.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); 
        if(async3_test.getStatus() ==AsyncTask.Status.FINISHED){ 

        /// so on for another 10 asynctask 
        } 

       } 
+0

использовать только 1 (один) задачу асинхронной для этого ... нет необходимости использовать более 1, если вам нужно запустить «Em„в строке“ – Selvin

ответ

-1

Выполнить первый AsyncTask затем выполнить второй AsysncTask в методе onPostExecute первого AsyncTask и так далее.

new FirstAsyncTask().execute(); 

private class FirstAsyncTask extends AsyncTask<URL, Integer, Long> { 
protected Long doInBackground(URL... urls) { 
    //do something 
} 

protected void onPostExecute(Long result) { 
    new SecondAsyncTask().execute(); 
} 
} 

private class SecondAsyncTask extends AsyncTask<URL, Integer, Long> { 
protected Long doInBackground(URL... urls) { 
    //do something 
} 

protected void onPostExecute(Long result) { 
    new ThirdAsyncTask().execute(); 
} 
} 

и так далее .....

+0

Я пробовал это, но он не работает должным образом. Также, если его значение null, я понятия не имею, как оно может перейти на 3-ей или 4-ю асинтезу. В любом случае любой массив может быть нулевым, но все asynctask должны выполняться в любом случае, если любая таблица может быть обновлена . Есть там очередь или что-то, чтобы исправить это> – jason

+0

Пробовал это, но я не получил нужный результат. – jason

0

Вы могли бы хотеть рассмотреть структуру. В библиотеке Bolts есть несколько способов связать задачи, которые довольно приятны ИМО. Одним из его преимуществ является уменьшение количества отступов, и вы можете обрабатывать ошибки в чистом виде.

0

В onPostExecute, проверьте, если ваша Асинхронный Task закончил

if(async1_test.getStatus() == AsyncTask.Status.FINISHED) 

Если это правда, переинициализировать объект и начать Async задачу снова.

Держите эту вещь ум, Android позволяет только один объект Асинхронный задачи, чтобы выполнить один раз, так что если вы хотите, чтобы выполнить его снова, используйте новый объект

0

Вы можете использовать Serial Executor для обработки такого рода ситуации.

new AsynTask1().executeOnExecutor(AsyncTask.THREAD_POOL_Executor,params); 

Надеется, что это помогает :)