En algunos casos es posible realizar la misma tarea, ya sea con un AsyncTask
o una Service
sin embargo por lo general uno es más adecuado para una tarea que el otro.
AsyncTask
s están diseñadas para tareas que consumen mucho tiempo y que no se pueden ejecutar con el subproceso de la interfaz de usuario. Un ejemplo común es obtener/procesar datos cuando se presiona un botón.
Service
s están diseñados para funcionar continuamente en segundo plano. En el ejemplo anterior de obtención de datos cuando se presiona un botón, puede iniciar un servicio, dejar que recupere los datos y luego detenerlo, pero esto es ineficiente. Es mucho más rápido utilizar un AsyncTask
que se ejecutará una vez, devolverá los datos y terminará.
Si necesita estar continuamente haciendo algo en el fondo, un Service
es su mejor opción. Ejemplos de esto incluyen reproducir música, verificar continuamente nuevos datos, etc.
Además, como ya dijo Sherif, los servicios no necesariamente se ejecutan fuera del subproceso de la interfaz de usuario.
En su mayor parte, Service
s son para cuando quiere ejecutar código incluso cuando la aplicación Activity
no está abierta. AsyncTask
s están diseñados para hacer que la ejecución del código fuera de la interfaz de usuario sea increíblemente simple.
¡Siento que realmente entendiste mi pregunta! Gracias – erikbwork
Es interesante que en esta charla de Google I/O en 2010 http://www.youtube.com/watch?v=xHXn3Kg2IQE el presentador ofrece 3 métodos diferentes para obtener datos de una API REST y el primero usa una Servicio. No soy un experto en Android, pero también tenía la impresión de que lo que dijo Computerish es básicamente correcto. – wuliwong
El último párrafo, "Los servicios son para cuando quiere ejecutar código incluso cuando la Actividad de su aplicación no está abierta". Este es también el caso con AsyncTask o hilos de fondo. es decir, cuando presiona hacia atrás en su actividad o llama a finish() y su actividad no está visible, pero aún así sus subprocesos de fondo se están ejecutando hasta que mata el proceso de su aplicación (por ejemplo, mediante el intercambio de tareas recientes). Lo he comprobado con 4.4.2 Google Nexus AOSP grouper –