AsyncTask.THREAD_POOL_EXECUTOR返回值

时间:2018-06-06 22:35:19

标签: java android multithreading android-asynctask

如何在不使用get()的情况下将多个AsyncTask的值返回到列表中?

我目前正在这样做,但我知道这不对。

for (int i=0; i != mediaList.size(); i++){
    UploadImage uploadImage = new UploadImage(this,
        new File(FileChooser.getPath(this, mediaList.get(i).uri)));
    String x = uploadImage.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR).get();
    mediaResult.add(x);
}

2 个答案:

答案 0 :(得分:1)

  

如何在不使用get()?

的情况下将多个AsyncTask的值返回到列表中

你不是。 AsyncTask是异步的,在后台线程上完成工作。

相反,重写UploadImage以获取整个文件集,让它处理所有文件,并使用onPostExecute()中的结果。

答案 1 :(得分:0)

您可以创建一个倒计时锁定器,其中包含您拥有多少个asyncs的计数器 然后等待它达到0

CountDownLatch cdl = new CountDownLatch(3);
Async1.oncomplete - > cdl.countDown();
Async2.oncomplete - > cdl.countDown();
Async3.oncomplete - > cdl.countDown();
cdl.await