启动两个AsyncTasks进行并行计算,并在完成后继续

时间:2012-11-02 12:54:53

标签: android multithreading android-asynctask

我必须编辑大量的位图文件,所以我想使用我设备的所有内核来加速这个过程。我认为这将是一个很好的解决方案:

  • 计算可用核心数
  • 将图像拆分为[numberofcores]部分
  • 为每个核心创建一个新线程并让该线程处理图像的一部分

如何在继续执行其他任务之前确保所有线程都已完成,例如保存图片或返回完全处理了位图的消息?

3 个答案:

答案 0 :(得分:1)

Join每个工作线程在你启动所有工作线程之后。

答案 1 :(得分:1)

我认为您应该制作另一个等待所有其他线程完成的AsyncTask,因此在等待doInBackground()的{​​{1}}方法中,您可以执行以下操作:

AsyncTask

然后在“等待任务”的while( task1.getStatus()!=AsyncTask.Status.FINISHED || task1.getStatus()!= AsyncTask.Status.FINISHED){ Thread.sleep(500); } 方法中,您可以继续执行其他任务。

答案 2 :(得分:1)

使用一个数组扩展Handler.Callback类,该数组跟踪处理特定图像的线程(可能还需要扩展Thread,以便您可以指定Bitmap的哪个部分特定线程正在处理),每个线程的末尾处理sendMessage到您使用扩展类实例创建的Handler对象。

覆盖扩展类中的handleMessage,以从特定线程的处理数组存储结果中接收特定线程删除线程的结果。处理数组大小为0时,将结果放在一起。