我有一个服务,我希望在其中执行一系列密集型任务(将位图上传到某个服务器)
假设上传功能是
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
}
}
我想知道哪种技术最好。或者,如果有更好的方法在服务中执行一系列密集型任务。
答案 0 :(得分:2)
我认为IntentService
是一种更好的方式。
protected void onHandleIntent(){
for (MyImageMaker mim : ImageMakers){
uploadImage(mim.getImage());
}
}