【问题标题】:How do I check whether both parallel AsyncTask threads are finished [duplicate]如何检查两个并行 AsyncTask 线程是否已完成 [重复]
【发布时间】:2017-12-10 19:50:54
【问题描述】:

我正在通过onCreate 中的这个 sn-p 并行调用两个 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);
        }

onPostExecute 期间,我检查是否有任何数据被检索并通过finishstartActivityForResult 调用返回:

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

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

【问题讨论】:

    标签: android android-asynctask


    【解决方案1】:

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

    要在 UI 线程中返回结果,请启动 AsyncTask 为:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-10-18
        • 2011-02-15
        • 2017-05-20
        • 1970-01-01
        • 2021-07-13
        • 1970-01-01
        • 2017-11-13
        • 2016-08-24
        • 1970-01-01
        相关资源
        最近更新 更多