2

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

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

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

4

3 回答 3

1

启动所有工作线程后加入每个工作线程。

于 2012-11-02T12:57:26.670 回答
1

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

while( task1.getStatus()!=AsyncTask.Status.FINISHED
         || task1.getStatus()!= AsyncTask.Status.FINISHED){
    Thread.sleep(500);
}

然后在onPostExecute()您的“等待任务”的方法中,您可以继续执行其他任务。

于 2012-11-02T13:16:06.020 回答
1

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

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

于 2012-11-02T14:32:06.517 回答