Tengo una aplicación que genera un nuevo hilo cuando un usuario solicita que se filtre una imagen.Simple Thread Management - Java - Android
Este es el único tipo de tarea que tengo y todos son de igual importancia.
Si solicito demasiados subprocesos simultáneos (Máx. Que siempre quiero es 9) el administrador de subprocesos arroja un RejectedExecutionException.
Por el momento lo que hago es;
// 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);
}
}
sólo tiene que añadir la tarea rechazada a una cola y la próxima vez que un hilo se inicia la cola se comprueba para ver si hay un retraso.
El problema obvio con esto es que si la tarea final se rechaza en su primer intento, nunca se reiniciará (Hasta después de que ya no se necesite).
Solo me pregunto si hay un modelo simple que debería usar para manejar este tipo de cosas. Necesito tareas para notificar a la cola cuando hayan terminado, así sé que hay espacio, pero no estoy seguro de cómo.
Saludos cordiales,
Gavin
El límite ya no es 10. El límite se estableció porque AsyncTasks no debe ser disparado por docenas. Dado que el objetivo de dicha tarea es actualizar la interfaz de usuario, sería bastante terrible tener docenas de subprocesos que causen actualizaciones. –
El límite actual es de 5 subprocesos paralelos según http://google.com/codesearch#uX1GffpyOZk/core/java/android/os/AsyncTask.java –
@Grantland Chew: No, es 5 para empezar. Puede crecer más allá de eso. – CommonsWare