Android服务线程

时间:2012-12-04 03:18:02

标签: java android multithreading service android-asynctask

我有一个服务,我希望在其中执行一系列密集型任务(将位图上传到某个服务器)

假设上传功能是

uploadImage(Bitmap bitmap);

这是最好的方法吗?

起初我是这样做的(记住可能有十几个元素的数组ImageMakers):

for (MyImageMaker mim : ImageMakers){
      uploadImage(mim.getImage());
}

我的理由是,因为我没有使用UI线程,所以我不需要将这一系列密集型任务放在另一个线程上。 但后来我想也许我应该使用ThreadPoolExecutor来加快速度。

  ThreadPoolExecutor executor = (ThreadPoolExecutor)Executors.newFixedThreadPool(5);//5 is arbitrary
   for (MyImageMaker mim : ImageMakers){

 executor.execute(new Runnable(){
      public void run(){
        uploadImage(mim.getImage());
     } 
     }   
  }

我的第一个问题是,这是一个好主意吗?

然后我想我想在上传最后一张图片后调用其他功能。使用ThreadPoolExecutor,最好的方法是什么?

不知道最好的方法,我选择了AsyncTask。

 private class MyTask extends AsyncTask<Void,Void,Void>{


      protected Void doInBackground(Void... arg0) {

          for (MyImageMaker mim : ImageMakers){
                    uploadImage(mim.getImage());
             }


    }

    @Override
    protected void onPostExecute(Void v) {
        anotherFunction();//needs to be called after all images uploaded

    }
}

我想知道哪种技术最好。或者,如果有更好的方法在服务中执行一系列密集型任务。

1 个答案:

答案 0 :(得分:2)

我认为IntentService是一种更好的方式。

protected void onHandleIntent(){
    for (MyImageMaker mim : ImageMakers){
        uploadImage(mim.getImage());
    }
}