Asynctask vs. Thread vs Services vs Loader

Me confundí un poco sobre las diferencias entre Asynctask, Thread, Services, Loader en Android. Sé cómo funciona. Pero todavía no entiendo qué y cuándo debo usar.

Trabajo con Android durante 3 años, y generalmente todavía uso Asynctask para todas las tareas de fondo (ya veces hilo). Pero muchas personas dicen que "Asynctask está obsoleta", y no recomendamos usarlas. También se recomienda usar robospice o Volley.

Por lo tanto, es Asynctask realmente tan mal y yo debería utilizar marco para las tareas de red? ¿Y qué debo utilizar para la tarea de fondo (no de red)?

AysncTasks no están "anticuados" tanto como son incompletos . Entre otras cosas, las tareas asíncronas no se preocupan si su actividad principal está en ejecución o no. Por la misma razón por la que incluye cheques para verificar que el contexto sea nulo o no. Además, a menos que estés usando tu propio Thread Pool Executor, estas tareas se ejecutan en serie.

Volley intenta llenar esas lagunas, principalmente en relación con la sincronización con el hilo principal y la agrupación de hilos. Se comporta óptimo si desea hacer cosas que requieren peticiones de red promedio; Como algunos meta lista de datos e imágenes (foto las solicitudes de aplicación de youtube y las solicitudes de aplicación de facebook para los mensajes).

Por lo general, pocas ventajas de Volley son las siguientes

  1. Mantiene al hilo de trabajo informado sobre la actividad (Hilo principal)
  2. Priorización de recursos más fácil podría dar prioridad a sus solicitudes de descarga. Un escenario típico implicaría dar prioridad al texto sobre la imagen.
  3. Caché de solicitud y gestión de memoria eficaces.
  4. Extensible
  5. Le proporciona una opción para descartar su solicitud en caso de que su actividad se haya apagado o reiniciado.
  6. Patrones más simples para la recuperación de datos en comparación con AsyncTasks.

La volea sufre mal cuando se trata de las solicitudes de streaming / video como se menciona en Google I / O.

No soy exactamente consciente de robospice. Ps: Si tiene tiempo en su mano, consulte https://www.youtube.com/watch?v=yhv8l9F44qo

Aquí hay una lectura adicional si desea ir a otras bibliotecas con puntos de referencia para el mismo. Comparación de bibliotecas de redes Android: OkHTTP, Retrofit y Volley

Ok intentaré contestar esto. Estoy trabajando con androide por más de 3 años ahora.

Threads: -como los hilos de java, úsalo para hacer operaciones pesadas, pero tienes que administrarla por tu cuenta y también puede causar problemas de sincronización y no puedes actualizar ui desde él hasta que lo estés ejecutando en el hilo ui.

AsyncTask: – una gran biblioteca de threading disponible en android para hacer la tarea de fondo.Él es administrado por el propio android usted puede actualizar el ui de que se ejecuta en paralelo o en serie dependiendo de la versión de android.It puede ser desordenado a veces para usarlo Como en los casos de cambios de orientación y ahora para hacer llamadas de red que puede utilizar volea que es mejor que aysnctask.Aysnctasks no se molestan acerca de su actividad de los padres se está ejecutando o no y puede ser bastante tedioso para cancelar a veces que te sugiero que si Usted está utilizando asynctask para hacer llamadas API REST mejor uso RETROFIT o VOLLEY y si usted elige RETROFIT entre los dos te recomiendo que echar un vistazo a PICASSO otra biblioteca impresionante de cuadrado para la carga de la imagen.

Servicio: para hacer tareas de fondo a largo plazo debe utilizar servicios. Puede enlazar los servicios a su actividad si lo necesita. Puede definir que se ejecutan en el mismo hilo o un hilo diferente y debe declararlo en manifiesto o Puede utilizar IntentService una variante de servicio que se ejecuta en un propio hilo, pero tenga cuidado antes de usarlo, no lo use para las tareas de ejecución de largo. Su un solo operador de tiempo.Si va a utilizar el servicio evaluar el caso que cuál Se adapte mejor a su requisito un Service o IntentService normal

Cargadores: -esto es lo mismo que asynctask de muchas maneras, se aconseja usar cargadores con los fragmentos y resuelve el problema de orientación de los asynctasks. Espero que ayudara

Realmente no importa, qué abstracción se utiliza, se reduce a un Thread . Por lo tanto, cada una de las clases asíncronas / paralelas de Android utiliza Thread / Executor entre bastidores, y tiene exactamente los mismos problemas potenciales, como el bloqueo, que tienen los hilos.

La diferencia entre entonces radica en su uso. AsyncTask por ejemplo, define un handy completion-callback – onPostExecute() . Un CountDownTimer permite controlar el tiempo y así sucesivamente.

Usted puede utilizar un Thread simple, por supuesto, pero en este caso usted tiene que invertir más tiempo en la captura de posibles problemas a ti mismo.

Por lo tanto, Android le ofrece un par de herramientas adecuadas para los puestos de trabajo adecuados.

Pero muchos pueblos dicen que "Asynctask está obsoleto", y no recomendamos usarlos.

No me he encontrado con alguien que diga esto. Sin embargo, es tarea del equipo de Android decidir cuándo alguna parte del marco está obsoleta o obsoleta. CursorLoaders utiliza AsyncTaskLoader que utiliza AsyncTask . AsyncTasks son una abstracción que impide que el desarrollador tenga que implementar una lógica de estado de AsyncTasks desagradable. Esto significa que todas estas clases usan a su vez usan Threads en el fondo.

Por lo tanto, es Asynctask realmente tan mal y yo debería utilizar marco para las tareas de red? ¿Y qué debo utilizar para la tarea de fondo (no de red)?

Se trata de saber cuándo y cómo usar sus herramientas. Usted menciona CursorLoader . En ese caso particular, al leer los documentos y jugar con él un poco, te das cuenta de que se integra a propósito sin problemas con ContentProviders . Ahora, ContentProviders resumen los datos subyacentes; Puede consultar una base de datos SQLite local o un servidor remoto.

Normalmente, AsyncTasks se utilizan para recuperar fragmentos concisos de información "no demasiado grande" (cuando se utiliza para hablar con servidores). La gente podría decir que AsyncTasks están obsoletas porque hay formas mejores (más eficientes) de interactuar con servidores (ver Retrofit ).

Creo que AsyncTask es mejor que Thread en que proporciona la devolución de llamada en el hilo principal; Loader es mejor que AsyncTask, ya que también maneja el cambio de configuración para usted.

  • Cómo detectar MotionEvent.ACTION_DOWN en el servicio Android
  • onCreate del servicio android no se llama
  • ¿Cómo obtengo el nombre de una clase de servicio en Android?
  • Permisos de Android en el manifiesto
  • ¿Cómo simular el tacto del servicio del fondo con sendevent o la otra manera?
  • Servicio de Android interactuando con múltiples actividades
  • ¿Cómo puede el servicio de Android actualizar la interfaz de usuario de la actividad que lo inició?
  • ¿Existe una manera sencilla de detener un servicio en respuesta a que un usuario haga clic en una notificación?
  • Vinculación de un servicio a un android.app.Activity vs Enlace a un android.app.Application
  • Cómo probar un IntentService utilizando un ServiceTestCase?
  • Android - vinculante para el servicio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.