我必须编辑巨大的位图文件,所以我想使用我设备的所有内核来加速这个过程。我认为这将是一个很好的解决方案:
- 计算可用核心数
- 将图像拆分为 [numberofcores] 个部分
- 为每个核心创建一个新线程并让该线程处理图像的一部分
在继续执行其他任务(例如保存图片或返回位图已完全处理的消息)之前,如何确保所有线程都已完成?
我必须编辑巨大的位图文件,所以我想使用我设备的所有内核来加速这个过程。我认为这将是一个很好的解决方案:
在继续执行其他任务(例如保存图片或返回位图已完全处理的消息)之前,如何确保所有线程都已完成?
启动所有工作线程后加入每个工作线程。
我认为您应该制作另一个AsyncTask
等待所有其他线程完成的线程,因此在doInBackground()
等待的方法中您AsyncTask
可以执行以下操作:
while( task1.getStatus()!=AsyncTask.Status.FINISHED
|| task1.getStatus()!= AsyncTask.Status.FINISHED){
Thread.sleep(500);
}
然后在onPostExecute()
您的“等待任务”的方法中,您可以继续执行其他任务。
使用一个数组扩展一个Handler.Callback
类,该数组跟踪处理特定图像的线程(可能也需要扩展Thread
,以便您可以指定Bitmap
特定线程正在处理的部分),每个线程处理的结束sendMessage
到Handler
您创建的对象与您的扩展类实例。
在扩展类中重写handleMessage
,以接收特定线程的结果,从处理特定线程的数组存储结果中删除线程。当处理数组大小为0时,将结果放在一起。