2017-07-06 3 views
1

ich in onCreate über diese Schnipsel zwei AsyncTasks parallel bin Aufruf:Wie kann ich überprüfen, ob beide parallel AsyncTask Threads fertig sind

 if ((DictMode.equals("TATOEBA")) || (DictMode.equals("SENTENCE"))) { 

      dictAsyncTask = new DictAsyncTask(DictionaryLookUp.this, "Tatoeba"); 
//   dictAsyncTask.execute(); 
      dictAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
     } 

     if ((DictMode.equals("JUKUU")) || (DictMode.equals("SENTENCE"))) { 

      dictAsyncTask = new DictAsyncTask(DictionaryLookUp.this, "Jukuu"); 
//   dictAsyncTask.execute(); 
      dictAsyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
     } 

während onPostExecute ich überprüfen, ob alle Daten abgerufen wird und von der Rückkehr startActivityForResult Anruf über finish:

  if (alldictStuff.size() == 0) { 

       ... 

       Toast.makeText(DictionaryLookUp.this,"NOTHING FOUND ...",Toast.LENGTH_SHORT).show(); 

       if ((DictMode.equals("TATOEBA")) || (DictMode.equals("JUKUU")) || (DictMode.equals("SENTENCE"))) { 

        Intent intentCard = new Intent(getApplicationContext(), CardView.class); 

        setResult(Activity.RESULT_OK); 

        finish(); 
       } 

aber das ist offensichtlich fehlerhaft sin ce Ich überprüfe nicht, ob beide Threads keine Ergebnisse zurückgeben, also was ist der beste Weg zu überprüfen, ob beide Threads fertig sind und nichts zurückgegeben? Muss ich meine eigenen Variablen verwenden, um sie zu verfolgen, oder gibt es etwas Ordentliches/Integriertes, das ich nutzen kann?

Antwort

-1

Sie müssen die AsyncTask.get() -Methode aufrufen, um das Ergebnis zurückzuerhalten, und warten, bis die Ausführung von doInBackground nicht abgeschlossen ist. Aber das wird Main UI-Thread einfrieren, wenn Sie get-Methode nicht innerhalb eines Threads aufrufen.

Um in UI-Thread zu erhalten beginnen führen zurück AsyncTask wie:

String str_result = new RunInBackGround() execute() get();..

0

Dies ist hauptsächlich, wie Sie Ihre Geschäftslogik verwalten möchten. Von Ihrem onPostExecute() entweder send Intent oder Broadcast-Nachricht an Haupt-Thread senden oder asynchrone Task-Status-Liste und markieren Sie für jede Aufgabe fertig von onPostExecute().

Verwandte Themen