2011-12-05 17 views
5

Me gustaría tener una cola de trabajo/tareas para hacer en un hilo separado, pero solo puede procesar un trabajo a la vez. Entonces no de forma simultáneaAndroid hilo queue

¿Hay algo de Android incorporado para esto?

Gracias,

EDIT: El trabajo = obtener información de la base de datos. Una vez hecho esto, actualice la UI con la información obtenida.

+0

Por lo general, la lectura de DB se realiza en el 'hilo separado', pero que se actualicen la interfaz de usuario se debe hacer en el hilo principal. Entonces estas tareas no se realizarían secuencialmente en el mismo hilo. – Tom

Respuesta

13

¿Has comprobado java.util.concurrent.Executors? Usted podría hacer algo como esto:

final static ExecutorService tpe = Executors.newSingleThreadExecutor(); 
... 
tpe.submit(new Runnable() { 
    @Override 
    public void run() { 
     // your work 
    } 
}): 

No es específico de Android, es parte de la jdk5.

Desde el doc:

Crea un ejecutor que utiliza un único subproceso de trabajo que operan fuera de una cola de sin límites. (Sin embargo, tenga en cuenta que si este único hilo finaliza debido a un error durante la ejecución antes del apagado, uno nuevo tendrá en su lugar si es necesario para ejecutar las tareas posteriores). Las tareas se ejecutan secuencialmente y no más de una tarea será activo en un momento dado. A diferencia del equivalente newFixedThreadPool (1), se garantiza que el ejecutor devuelto no será reconfigurable para utilizar subprocesos adicionales.

+0

Creo que podría actualizar el hilo de la interfaz de usuario cuando el trabajo se complete? – pdiddy

+0

Por lo general, cuando el trabajo está hecho, puede cambiar su UI ya sea ejecutando en el hilo ui o publicando un mensaje usando un controlador – gwa

3

Si desea que algo pueda funcionar independientemente del ciclo de vida de la actividad que puede hacer el trabajo en cola, debe echar un vistazo a IntentService. Puede girar, hacer bloques de trabajo discretos de forma asíncrona y luego terminar cuando se completen todas sus tareas.

Si no necesita nada que pueda vivir sin ninguna actividad, Java tiene ExecutorService junto con varias implementaciones diferentes.