package com.atomjack.vcfp; import android.os.AsyncTask; import com.atomjack.shared.Logger; import java.util.ArrayList; public class LimitedAsyncTask { private int numConcurrentTasks = 5; private ArrayList<LAsyncTask> tasks = new ArrayList<>(); public void run() { if(tasks.size() > 0) { Logger.d("Will run first %d of %d tasks", numConcurrentTasks, tasks.size()); for (int i = 0; i < numConcurrentTasks; i++) { if(tasks.size() > 0) { LAsyncTask task = tasks.remove(0); task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } } } } public void addTask(LAsyncTask task) { task.handler = taskHandler; tasks.add(task); } public void setNumConcurrentTasks(int numConcurrentTasks) { this.numConcurrentTasks = numConcurrentTasks; } private TaskHandler taskHandler = new TaskHandler() { @Override public void onFinished() { Logger.d("Done with task, have %d tasks left", tasks.size()); if(tasks.size() > 0) { LAsyncTask task = tasks.remove(0); Logger.d("Now running task %s", task.label); task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } } }; public interface TaskHandler { void onFinished(); } }