2017-07-06 10 views
1

私はonCreateにこのスニペットを介して並列に2つのAsyncTasksを呼んでいる仕上がっているかどうかを確認するにはどうすればよい:onPostExecute私は、並列AsyncTaskスレッドの両方が

 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); 
     } 

は、私がどのようなデータが取得されますかどうかを確認してから戻りますfinish経由startActivityForResultコール:

  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(); 
       } 

が、それは明らかに欠陥が罪です私は両方のスレッドが結果を返すかどうかをチェックしていないので、両方のスレッドが終了して何も返されていないかどうかを確認する最良の方法は何ですか?それを追跡するために私自身の変数を使わなければならないのですか、または私が利用できる、きれいなものがありますか?

答えて

-1

結果を取得するにはAsyncTask.get()メソッドをコールし、doInBackgroundの実行が完了しなくなるまで待つ必要があります。スレッド内でgetメソッドを呼び出さないと、メインUIスレッドがフリーズします。

はAsyncTaskをバックUIスレッドでの結果を開始取得するなど:=新しいRunInBackGround

文字列str_result())(実行を取得します();。。

0

これは主にビジネスロジックの管理方法です。 onPostExecute()からインテントを送信するか、ブロードキャストメッセージをメインスレッドに送信するか、非同期タスクステータスリストを維持し、onPostExecute()から各タスクの終了をマークします。

関連する問題