У меня есть приложение, которое порождает новый поток, когда пользователь запрашивает изображение для фильтрации.
Это единственное задание, которое у меня есть, и все они одинаково важны.
Если я запрашиваю слишком много одновременных потоков (максимум, которое я когда-либо хочу - 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);
}
}
Просто добавьте отклоненную задачу в очередь, и при следующем запуске потока проверяется очередь на наличие невыполненных заданий.
Очевидная проблема заключается в том, что если последняя задача будет отклонена с первой попытки, она никогда не будет перезапущена (до тех пор, пока она больше не нужна).
Просто интересно, есть ли простая модель, которую я должен использовать для управления такого рода вещами. Мне нужны задачи, чтобы уведомить очередь об их завершении.