我有一个应用程序,当用户请求过滤图像时会生成一个新线程。这是我唯一的任务类型,并且所有任务同等重要。
如果我请求太多并发线程(最多只需要9个),线程管理器会抛出RejectedExecutionException异常。
目前我的做法是;
如果我请求太多并发线程(最多只需要9个),线程管理器会抛出RejectedExecutionException异常。
目前我的做法是;
// Manage Concurrent Tasks
private Queue<AsyncTask<Bitmap,Integer,Integer>> tasks = new LinkedList<AsyncTask<Bitmap,Integer,Integer>>();
@Override
public int remainingSize() {
return tasks.size();
}
@Override
public void addTask(AsyncTask<Bitmap, Integer, Integer> task) {
try{
task.execute(currentThumbnail);
while(!tasks.isEmpty()){
task = tasks.remove();
task.execute(currentThumbnail);
}
} catch (RejectedExecutionException r){
Log.i(TAG,"Caught RejectedExecutionException Exception - Adding task to Queue");
tasks.add(task);
}
}
只需将被拒绝的任务添加到队列中,下一次启动线程时会检查队列是否有积压。
显然存在一个问题,如果最后一个任务在第一次尝试时被拒绝,它将永远不会重新启动(直到不再需要为止)。
我想知道是否有一个简单的模型可用于管理这种情况。我需要任务在完成时通知队列。