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.
- Dudas sobre bindService
- Uso de un wakelock en un servicio Android 1.5
- Diseño de aplicaciones de Android: derecho dividido entre actividades, servicios e hilos?
- El servicio se detiene cuando la actividad está cerrada
- ¿Cómo comprobar si un servicio ya se está ejecutando o no en android?
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)?
- Android aidl no puede enlazar al servicio, cuando el host se instala después de que el cliente
- Impedir que un servicio de Android se destruya después de un enlace
- "No se puede realizar esta acción en una instancia no sellada" excepción java.lang.IllegalStateException
- Android - Firebase jobdispatcher
- Cámara Android: se ejecuta en segundo plano desde el servicio
- SurfaceView en servicio
- Listener de Internet Ejemplo de Android
- Servicio de música matado incluso cuando startForground
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
- Mantiene al hilo de trabajo informado sobre la actividad (Hilo principal)
- 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.
- Caché de solicitud y gestión de memoria eficaces.
- Extensible
- Le proporciona una opción para descartar su solicitud en caso de que su actividad se haya apagado o reiniciado.
- 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.
- Atascado en "Vaciar memoria, la aplicación se congelará. Brrr. "Mensaje
- Al marcar una casilla de verificación en listview, también se comprueban otras casillas aleatorias