当通过线程池执行任务时,android progressbar不会更新

时间:2013-11-11 11:16:15

标签: java android multithreading user-interface progress-bar

我从SDCARD读了大约50个 jpeg 文件,并将它们存储在Bitmap[]上 为此,我使用线程池,因为我想快速读取图像代码完成其任务很好,但我想更新Progressbar以及处理图像,以便向用户反馈线程池完成了多少任务。

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

    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);

0 个答案:

没有答案