我有一个服务,我希望在其中执行一系列密集任务(将位图上传到某个服务器)
假设上传功能是
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
}
}
我想知道哪种技术最好。或者,如果有更好的方法可以在服务中执行一系列密集任务。