Android AsyncTask.THREAD_POOL_EXECUTOR vs ThreadPool personalizado con Runnables

Tengo algunas tareas que necesito para procesar simultáneamente en Android y me gustaría usar algún tipo de grupo de hilos para hacerlo. No pude encontrar en la documentación lo que realmente sucede "detrás de las escenas" al ejecutar un AsyncTask con AsyncTask.THREAD_POOL_EXECUTOR.

Mi pregunta es: ¿Qué pierdo usando AsyncTasks con AsyncTask.THREAD_POOL_EXECUTOR en lugar de implementar un ThreadPool personalizado con Runnables? (Hablemos post-nido de abeja).

Me doy cuenta de que la pregunta es bastante general, pero soy bastante nuevo para hacer la programación simultánea (además de AsyncTask sí mismo). ¡No estoy buscando un tutorial sobre programación simultánea! Sólo busco entender cómo el específico de Android AsyncTask.THREAD_POOL_EXECUTOR es diferente. Creo que una explicación sería útil para otros en el futuro, ya que sopesar los pros y los contras de la elección de utilizar AsyncTask vs hilo / Runnable. ¡Gracias por adelantado!

AsyncTasks le ofrece la posibilidad de ejecutar acciones en el subproceso de la interfaz de usuario antes y después de ejecutar la tarea del trabajador. Por lo tanto, si no necesita comunicarse con la interfaz de usuario a continuación, utilizar su propio ejecutor – siempre se puede implementar este manejador de uso. AsyncTasks se están ejecutando en serie desde api 11 porque la ejecución paralela se consideró difícil de implementar correctamente.

Si necesita más flexibilidad, entonces los ejecutores son un camino a seguir, que le permitirá especificar libremente cuántas tareas ejecutar en paralelo, cuántos poner en la cola, etc

Si está interesado en los detalles, siempre puede buscar en las fuentes:

http://androidxref.com/4.4.3_r1.1/xref/development/samples/training/bitmapfun/BitmapFun/src/main/java/com/example/android/bitmapfun/util/AsyncTask.java

El trabajo que no sea UI puede ser tomado por cualquier cosa incluyendo AsyncTasks, HandlerThreads, IntentServices, etc.

La razón por la que se sugiere AsyncTasks para trabajos relacionados con la interfaz de usuario (trabajos que afectan a la interfaz de usuario) es que AsyncTask tiene devoluciones de llamada de ayuda que le permite transferir el control al subproceso de interfaz de usuario.

Sin embargo, no se sugiere para operaciones de ejecución más largas ya que, de forma predeterminada, utiliza un ejecutor global y esto puede causar que los subprocesos de espera globales de aplicación se detengan al ejecutar operaciones de largo plazo. Así que puede cambiar a un ejecutor personalizado y deshacerse de afectar global.

Al final del día, HandlerThreads son hilos de nuevo que le da un Looper para mantener el hilo vivo. Las ejecuciones todavía se harán en serie, ¿cuál es la verdadera razón para usarlas? Creo que es el poder de la capacidad de ejecutar Runnables como ejecutores, pero más de manera ligera.

IntentServices son de nuevo – la forma de ejecutar tareas en serie, pero tiene más poder y aislamiento, ya que son componentes totalmente diferentes tiene ciclos de vida separados. Se destruyen automáticamente para que no tenga que preocuparse de destruirlas para reducir la prioridad del proceso de la aplicación (fuera del tema, pero causa algunos problemas de rendimiento de la memoria, etc.)

  • Android Looper y pila de llamadas
  • ¿Debo usar setDaemon () en android?
  • Thread para capturar un tiempo de espera de InputStream.read () BluetoothSocket
  • Cómo ejecutar un hilo después de completar otro hilo
  • ¿Debería o no debería utilizarse AsyncTask para operaciones de larga duración?
  • Cola de hilos de Android
  • Pantalla secundaria de Android: persistencia a través de la invocación de actividad
  • Android: AsyncTask OR normal Java threads con ExecutorService
  • Comunicación multihilo: ¿qué tan bueno es el uso de variables atómicas como AtomicInteger? ¿Por qué no hay AtomicFloat?
  • Corrección multihilo: Utilización de bloqueo sincronizado
  • Android: ejecuta código en intervalos regulares
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.