2

我从 SDCARD 读取了大约 50 个jpeg文件并将它们存储起来,Bitmap[] 因为我想尽可能快地读取图像,因为我想尽可能快地读取图像给用户线程池完成了多少任务。

问题是线程池完成其任务后进度条已更新,但我确实在进程之间发送事件更新。这是我如何执行线程池并通过处理程序将更新发送到进度条但进度条不更新线程池占用所有 CPU 并挂起 UI处理时间,最后 Progressbar 得到更新。

    ExecutorService threadPool;
    CompletionService<ProcessedBitmap> pool;
    threadPool = Executors.newFixedThreadPool(8);
    pool = new ExecutorCompletionService<ProcessedBitmap>(threadPool);
    for(int taskIndex = 0; taskIndex < preprocessingTasks.size(); taskIndex++)
    {
         try 
         {
             if(isCancelled)
             {
                 futureObjectList.get(taskIndex).cancel(true);
                 Utility.trace("Task Cancelled");
             }
             else
             {
                 Thread.sleep(10);
                 ProcessedBitmap result = pool.take().get();
                 images[result.getFrameIndex()] = result.getBitmap();
                 Message message = new Message();
                 message.what = PROGRESS_UPDATE;
                 message.arg1 = taskIndex;
                 handler.sendMessage(message);
             }
         }
         catch(Exception exception)
         {
             Utility.trace("Thread pool Exception :"+exception.getMessage());
         }
    }
    threadPool.shutdown();
    Message message = new Message();
    message.what = PRE_PROCESS_COMPLETE;
    message.obj =  images;
    handler.sendMessage(message);
4

0 回答 0