2016-02-17 2 views
0

Это моя ситуация, я имел AsyncTask (1) которым запустить другой AsyncTask (2) Мне нужно, что AsyncTask (1) ждать недо AsyncTask (2) отделка, чтобы быть более ясным результатом AsyncTask (2) используется в результате AsyncTask (1)Родитель AsyncTask ждать ребенка в AsyncTask в

Я сделал этот трюк в AsyncTask (1):

protected void onPostExecute(Integer integer) { 

     Log.e(" nbr key : "+Utils1.nbr_cle,""); 
     Log.e("*=======*","Démarrage de l'application *=======*"); 
    do { 
     try { 
      Thread.sleep(300); 
      Log.e("======>", "Not Finished yet !"); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
     while (!taskFinished); 
     Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     startActivity(intent); 

    } 

в AsyncTask (2)

@Override 
    protected void onPostExecute(Integer integer) 
    { 
     super.onPostExecute(integer); 
      SplashActivity.taskFinished = true; 
      int myBox_size = activityBox.realm.where(MyBox.class).findAll().size(); 
      Log.e("MyBox Finished ","Size of mybox :" +myBox_size); 


    } 

, но это не работает:/

+0

Любая причина, почему вы не можете просто использовать один AsyncTask вместо 2, чтобы обработать всю необходимую логику в фоновом потоке, а затем разместить его Результаты? Вы можете использовать CountDownLatch внутри нового потока в блоке try/catch/finally (наконец, блокировать обработку всех обновлений)? Передайте ссылку на CountDownLatch в каждую асинтезу, отсчитывая, когда каждый заканчивается). –

+0

Слушайте bro, первая asynctask дает мне идентификатор, который я буду использовать для отправки запроса с использованием второй Asynctask, возможно ли это с помощью одной Asyncktask? – Euphor08

+0

@ Eupho08, Это будет зависеть, если вы сделали блокирующий вызов? Я не знал, что мы связаны? Я предложил использовать сквозной подход, используя New Thread и CountDownLatch. –

ответ

0

То, что я сделал это работаю на второйAsyncktask в PostExcute из AsynckTask(1), чтобы избежать этой проблемы, так как запуск второгоAsyncTask в первого один не хорошая идея.

Если кто-то хочет использовать CountDownLatch: Это некоторые рефов: http://www.javamex.com/tutorials/threads/CountDownLatch.shtml

0

Это не очень хорошая идея, и, вероятно, не будет работать из-за способа AsyncTask нити исполнителей работы. По умолчанию ваши экземпляры AsyncTask сериализуются, поэтому нужно закончить до начала другого.

+0

Да, но в этой ситуации я могу это сделать? потому что дочерний asynkTask должен завершиться первым, потому что результат используется родительским asynktask – Euphor08

+0

Вам нужно будет либо изменить исполнителя, используемого для 'AsyncTask' в вашем приложении; или, используя свои собственные потоки и исполнители потоков. –

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