Android: AsyncTask OR normal Java threads con ExecutorService

Mi aplicación utiliza un Service para hacer algunas cosas de fondo. Estoy utilizando subprocesos adicionales en el servicio para hacer algún cálculo. Para este propósito, creo dos hilos cada 5 a 10 segundos, que están ejecutando de 5 a 10 segundos. Pero no sé qué modelo de hilo debería usar:

  1. AsyncTask:

    Pros:

    • fácil de usar
    • Específico de Android
    • Interfaz de usuario fácil

    Contras:

    • Dado que tengo que utilizar el nivel de la API 10, no hay ningún ExecutorService con grupo de hilos fijo para ejecutar las AsyncTasks
  2. Normal Java Hilos:

    Pros:

    • ExecutorService con conjunto de hilos fijo

    Contras:

    • No es tan fácil de manejar, por ejemplo interacción UI

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

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

¿Hay una sobrecarga pesada 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 ninguna diferencia sustancial entre los dos.

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

 Needle.onMainThread().execute(new Runnable() { @Override public void run() { // eg 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
  • Tamaño del grupo de hilos fijo
  • Tamaño de grupo de hilos personalizable
  • Soporta la interacción de la interfaz de usuario ("haz el trabajo y luego usa el resultado en el subproceso de la interfaz de usuario")
  • Android 1.5+
  • Se comporta de la misma forma en todas las versiones de la plataforma

Contras

  • Dependencia adicional de la biblioteca

Compruébelo en GitHub: https://github.com/ZsoltSafrany/needle

  • Android: hilo de fondo
  • Notificando un solo hilo: notify, notifyAll o concurrent.locks.Condition?
  • ¿Los hilos se eliminan automáticamente después de que el método run () sale en Java?
  • Cómo optimizar las aplicaciones de Android para varios núcleos
  • Android, cuando debo usar syncronized en un hilo
  • Java.util.concurrent.TimeoutException android.view.ThreadedRenderer.finalize () tiempo de espera transcurridos 10 segundos
  • Llamada Hilo principal de hilo secundario en Java / Android
  • Android.os.networkonmainthreadexception dentro de un nuevo Thread
  • ¿Por qué parece que tomar mucho tiempo para que este bloque sincronizado obtenga un bloqueo?
  • Java.lang.RuntimeException: Sólo se puede crear un Looper por subproceso
  • La aplicación puede estar haciendo demasiado trabajo en su hilo principal
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.