Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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?

  • Android: ejecuta código en intervalos regulares
  • Cuando ejecuto el subproceso segundo tiempo: java.lang.IllegalThreadStateException: El hilo ya comenzó
  • Android- Thread.join () hace que la aplicación se bloquee
  • No se puede finalizar una actividad en pausa hasta que se recupera el foco
  • OnSaveInstanceState / onPause - espera hasta que el estado se salve por completo antes de permitir que se procese el proceso
  • Simple Thread Management - Java - Android
  • Cómo comprobar si un hilo de Android está en ejecución
  • Cómo crear un hilo en Android NDK?
  • 2 Solutions collect form web for “Android: AsyncTask OR normal Java threads con ExecutorService”

    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

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.