2011-07-02 16 views
12

Mi aplicación utiliza un Service para hacer algunas cosas de fondo. Estoy usando hilos adicionales en el servicio para hacer algunos cálculos. Para este propósito creo dos hilos cada 5 a 10 segundos, que se ejecutan de 5 a 10 segundos. Pero no sé qué hilo-modelo que debe utilizar:Android: AsyncTask O hilos de Java normales con ExecutorService

  1. AsyncTask:

    Pros:

    • fácil de usar
    • androide específica
    • fácil interfaz de usuario de interacción

    Contras:

    • Desde que tengo que usar API de nivel 10, no hay ExecutorService con piscina hilo fijo para ejecutar las AsyncTasks
  2. normal Java Temas:

    Pros:

    • ExecutorService con grupo de subprocesos fijos

    Contras:

      No
    • tan fácil de manejar, por ejemplo, IU-interacción

qué modelo es mejor usar? Especialmente en la preocupación por el rendimiento. ¿Hay una sobrecarga considerable cuando estoy usando AsyncTasks, y es el ExecutorService más rápido en la reutilización de los hilos que Android en la creación de nuevas AsyncTasks?

Respuesta

12

Si observa la implementación de AsyncTask, verá que usa su propio grupo de subprocesos utilizando "hilos de Java normales".

¿Hay una sobrecarga considerable cuando estoy usando AsyncTasks, y es el ExecutorService más rápido en la reutilización de los hilos que Android en la creación de nuevas AsyncTasks?

No debe haber diferencia sustancial entre los dos.

+0

¡Eso es correcto, gracias! – Tobias

1

Estoy usando Needle; una biblioteca de multihilo de código abierto, simple y poderosa para Android.Con él se puede decir cosas como:

Needle.onMainThread().execute(new Runnable() { 
    @Override 
    public void run() { 
     // e.g. change one of the views 
    } 
}); 

o

Needle.onBackgroundThread().execute(new UiRelatedTask<Integer>() { 
    @Override 
    protected Integer doWork() { 
     int result = 1+2; 
     return result; 
    } 

    @Override 
    protected void thenDoUiRelatedWork(Integer result) { 
     mSomeTextView.setText("result: " + result); 
    } 
}); 

Pros

  • API muy simple
  • hilo fijo tamaño de la piscina
  • tamaño personalizable grupo de subprocesos
  • admite la interacción de UI ("d O y el trabajo a continuación, utilizar el resultado hilo de interfaz de usuario ")
  • androide 1.5 +
  • se comporta igual en todas las versiones de la plataforma

Contras

  • biblioteca adicional dependencia

Verificar en GitHub: https://github.com/ZsoltSafrany/needle

+1

Esto parece prometedor. Lo probaré en mi próximo proyecto. – Tiago

Cuestiones relacionadas