Ich habe eine Anwendung, die einen neuen Thread hervorbringt, wenn ein Benutzer nach einem Bild fragt, das gefiltert werden soll.Simple Thread Management - Java - Android
Dies ist die einzige Art von Aufgabe, die ich habe und alle gleich wichtig sind.
Wenn ich zu viele gleichzeitige Threads (Max ich jemals will, ist 9) fragt der Thread-Manager eine RejectedExecutionException.
In der Minute was ich tue ist;
// 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);
}
}
Fügen Sie einfach die abgelehnte Aufgabe in eine Warteschlange und das nächste Mal, wenn ein Thread die Warteschlange gestartet wird geprüft, ob ein Rückstand gibt.
Das offensichtliche Problem dabei ist, dass, wenn die letzte Aufgabe beim ersten Versuch abgelehnt wird, sie nie neu gestartet wird (bis sie nicht mehr benötigt wird).
Ich frage mich nur, ob es ein einfaches Modell gibt, das ich für die Verwaltung dieser Art von Sache verwenden sollte. Ich brauche Aufgaben, um die Warteschlange zu benachrichtigen, wenn sie fertig sind, also weiß ich, dass es Platz gibt, aber ich bin mir nicht sicher, wie.
Mit freundlichen Grüßen
Gavin
Das Limit ist nicht mehr 10. Das Limit wurde eingeführt, weil AsyncTasks nicht dazu gedacht sind, von Dutzenden gefeuert zu werden. Da das Ziel einer solchen Aufgabe darin besteht, die Benutzeroberfläche zu aktualisieren, wäre es ziemlich schlimm, Dutzende von Threads zu haben, die Aktualisierungen verursachen. –
Das Limit beträgt derzeit 5 parallele Threads gemäß http://google.com/codesearch#uX1GffpyOZk/core/java/android/os/AsyncTask.java –
@Grantland Chew: Nein, es ist 5, um mit zu beginnen. Es kann darüber hinaus wachsen. – CommonsWare