一連の集中的なタスク (ビットマップをサーバーにアップロードする) を実行したいサービスがあります。
アップロード機能が
uploadImage(Bitmap bitmap);
これに最適なアプローチは何ですか?
最初は、次のようにしました (配列 ImageMaker の要素が 12 個ほどある可能性があることを念頭に置いてください)。
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
}
}
どの技術が優れているか知りたいです。または、サービスで一連の集中的なタスクを実行するためのより良い方法がある場合。