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


Handler vs AsyncTask

Estoy confundido en cuanto a cuándo elegiría AsyncTask sobre un Handler. Digamos que tengo un código que quiero ejecutar cada n segundos que actualizará la interfaz de usuario. ¿Por qué elegir uno sobre el otro?

  • JUnit y Android?
  • El detector de estado del teléfono se llama varias veces
  • Acceso al objeto GoogleApiClient en Todas las actividades
  • Número de línea de devolución de Android ProGuard
  • Gradle resValue causa recursos de cadena duplicados
  • Mostrar mi diseño mientras SurfaceView está cargando Vista previa de cámara
  • Android: ¿Cuál es la mejor práctica, utilizando una cadena global o intentos con datos adicionales?
  • ¿Hay una manera de establecer Alpha dibujable usando XML?
  • Android: comprueba la presencia de otra aplicación
  • Cómo detectar caminar con Android acelerómetro
  • Cómo obtener el color de fondo del tema actual mediante programación
  • ¿Cómo obtienen los dispositivos Android las claves públicas de los desarrolladores?
  • 8 Solutions collect form web for “Handler vs AsyncTask”

    IMO, AsyncTask fue escrito para proporcionar una forma conveniente y fácil de usar para lograr el procesamiento de fondo en las aplicaciones de Android, sin preocuparse demasiado por los detalles de bajo nivel (subprocesos, bucles de mensajes, etc.). Proporciona métodos de devolución de llamada que ayudan a programar tareas y también a actualizar fácilmente la interfaz de usuario siempre que se requiera.

    Sin embargo, es importante tener en cuenta que al usar AsyncTask, un desarrollador se está sometiendo a sus limitaciones, que resultó debido a las decisiones de diseño que tomó el autor de la clase. Por ejemplo, recientemente descubrí que hay un límite en el número de trabajos que se pueden programar usando AsyncTasks.

    Handler es más transparente de los dos y probablemente le da más libertad; Así que si desea más control sobre las cosas que usted elegiría Handler de otra manera AsynTask funcionará muy bien.

    Mi regla de oro sería:

    • Si está haciendo algo aislado relacionado con la interfaz de usuario, por ejemplo, descargar datos para presentarlos en una lista, siga adelante y use AsyncTask .

    • Si está realizando varias tareas repetidas, por ejemplo, descargar varias imágenes que se van a mostrar en ImageViews (como descargar miniaturas) al descargar, utilice una cola de tareas con Handler .

    Siempre intente evitar utilizar AsyncTask cuando sea posible principalmente por las siguientes razones:

    • AsyncTask no está garantizado para ejecutarse ya que hay una base de ThreadPool y el tamaño máximo establecido por el sistema y si se crea demasiado asynctask que finalmente será destruido

    • AsyncTask se puede finalizar automáticamente, incluso cuando se ejecuta, dependiendo del ciclo de vida de la actividad y no tiene ningún control sobre ella

    • Los métodos AsyncTask que se ejecutan en el subproceso UI, como onPostExecute, se podrían ejecutar cuando la actividad a la que se está refiriendo ya no es visible, o posiblemente en un estado de disposición diferente, como después de un cambio de orientación.

    En conclusión, no debe utilizar los métodos UIThread vinculados de AsyncTask, que es su principal ventaja! Además, sólo debe realizar un trabajo no crítico en doInBackground. Lea este hilo para obtener más información sobre estos problemas:

    ¿AsyncTask es realmente falto conceptualmente o simplemente estoy perdiendo algo?

    Para concluir, trate de preferir usar IntentServices, HandlerThread o ThreadPoolExecutor en lugar de AsyncTask cuando cualquiera de los problemas mencionados anteriormente sea una preocupación para usted. Seguro que requerirá más trabajo pero su aplicación será más segura.

    Si desea hacer un cálculo cada x segundos, probablemente debería programar un Runnable en un Handler (con postDelayed() ) y que Runnable debería comenzar en el subproceso de interfaz de usuario actual. Si desea iniciarlo en otro subproceso, utilice HandlerThread. AsyncTask es más fácil de usar para nosotros pero no mejor que el manejador.

    El controlador se asocia con el subproceso principal de la aplicación. Maneja y programa los mensajes y los runnables enviados de hilos del fondo al hilo principal de la aplicación.

    AsyncTask proporciona un método sencillo para manejar los subprocesos de fondo con el fin de actualizar la interfaz de usuario sin bloquearla con operaciones que consumen mucho tiempo.

    La respuesta es que ambos se pueden utilizar para actualizar la interfaz de usuario de los subprocesos de fondo, la diferencia sería en su escenario de ejecución. Puede considerar utilizar el controlador si desea publicar mensajes retrasados ​​o enviar mensajes a MessageQueue en un orden específico.

    Usted puede considerar el uso de AsyncTask si desea intercambiar los parámetros (por lo tanto la actualización de la interfaz de usuario) entre el hilo principal de la aplicación y el hilo de fondo de una manera fácil y conveniente.

    Son la mejor pregunta de la entrevista que se le pide. AsyncTask – Se utilizan para descargar el subproceso de interfaz de usuario y realizar tareas en segundo plano. Manejadores – Android dosent tienen forma directa de comunicación entre la interfaz de usuario y el hilo de fondo. Los manejadores deben utilizarse para enviar mensajes o ejecutarlos a través de la cola de mensajes.

    AsyncTasks se utilizan donde las tareas son necesarias para ser ejecutadas en segundo plano y Handlers se utilizan para la comunicación entre una interfaz de usuario y el hilo de fondo.

    AsyncTask presume que va a hacer algo en el hilo de la interfaz de usuario, después de que haya terminado algún trabajo de fondo. Además, sólo puede ejecutarlo una vez (después de esto, su estado es FINISHED y obtendrá una excepción tratando de ejecutarlo una vez más). Además, la flexibilidad de usarlo no es mucho. Sí, puede utilizar THREAD_POOL_EXECUTOR para una ejecución paralela, pero el esfuerzo podría no ser digno.

    Handler no presume nada, excepto el manejo de Runnables y Mensajes. También, se puede ejecutar tantas veces como desee . Usted es libre de decidir a qué hilo debe estar conectado, cómo se comunica con otros manejadores, tal vez producirlos con HandlerThread . Por lo tanto, es mucho más flexible y adecuado para algunos trabajos repetidos.

    Compruebe diferentes tipos de ejemplos de Handler aquí .

    DoInBackground – básicamente funciona en otro hilo. OnPostExecute – publica los resultados en el subproceso de la interfaz de usuario y envía internamente el mensaje al controlador del subproceso principal. El hilo principal de la interfaz de usuario ya tiene un looper y un controlador asociados con él.

    Así que, básicamente, si tiene que hacer alguna tarea de fondo, utilice AsyncTask. Pero en última instancia, si algo necesita actualizarse en la interfaz de usuario, se utilizará el controlador de subproceso principal.

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