如何检查两个并行的AsyncTask线程是否都已完成

时间:2017-07-06 17:07:11

标签: android android-asynctask

我通过onCreate中的此片段并行调用两个AsyncTasks:

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

onPostExecute期间,我检查是否有任何数据被检索并通过startActivityForResultfinish来电回复:

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

但是这显然是有缺陷的,因为我没有检查两个线程是否都没有返回结果,那么检查两个线程是否完成并且没有返回任何内容的最佳方法是什么?我是否必须使用自己的变量来跟踪它,或者我可以利用哪些内置/内置?

2 个答案:

答案 0 :(得分:0)

这主要是您希望如何管理业务逻辑。 从onPostExecute()发送意图或向主线程发送广播消息或维护异步任务状态列表,并从onPostExecute()为每个任务标记完成。

答案 1 :(得分:-1)

您需要调用AsyncTask.get()方法来获取结果并等待,直到doInBackground执行未完成。但如果你没有在Thread中调用get方法,这将冻结主UI线程。

要在UI线程中获取结果,请将AsyncTask as:

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