2011-08-05 32 views
125

¿Por qué leo en la respuesta a la mayoría de las preguntas aquí mucho sobre AsyncTask y cargadores pero nada sobre Services? ¿Los servicios no se conocen muy bien o están en desuso o tienen algunos atributos incorrectos o algo así? ¿Cuáles son las diferencias?Android: AsyncTask vs Service

(Por cierto, sé que hay otros hilos al respecto, pero ninguno realmente establece claras diferencias que ayudan a un desarrollador a decidir fácilmente si está mejor usando el uno u otro para un problema real)

Respuesta

248

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.

+4

¡Siento que realmente entendiste mi pregunta! Gracias – erikbwork

+2

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

+8

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 –

55

Services son completamente diferentes: Los servicios no son hilos!

Su actividad se vincula a un servicio y el servicio contiene algunas funciones que, cuando se invoca, bloquea el hilo de llamada. Su servicio podría usarse para cambiar la temperatura de Celsius a Degrees. Cualquier actividad que se una puede obtener este servicio.


Sin embargo AsyncTask es un hilo que lo hace un poco de trabajo en segundo plano y al mismo tiempo tiene la capacidad de informar de los resultados de vuelta al subproceso de llamada.

Es sólo una idea: Un servicio puede tener un objeto AsyncTask!

+1

Los servicios se describen como ejecutándose en segundo plano, aunque continúen incluso cuando nuestra aplicación esté cerrada. AsyncTask también se usa para hacer algo en segundo plano. ¿Ya tu sabes? – erikbwork

+1

Sí, pero los servicios pueden o no estar haciendo algo. Son un OBJETO de larga duración –

+6

Era tan joven cuando escribí esto –

5

servicio es un demonio, es AsynkTask subproceso de fondo

+29

Un servicio no es un daemon, ya que no tiene su propio hilo de ejecución. –

+4

IntentService tiene – Malachiasz

6

Service es uno de los componentes de la estructura de Android, que no requiere UI para ejecutarse, lo que significa que incluso cuando la aplicación no es utilizada activamente por el usuario, puede realizar algunas operaciones con el servicio. Eso no significa que el servicio se ejecutará en un hilo separado, pero se ejecuta en el hilo principal y la operación se puede realizar en un hilo separado cuando sea necesario. Ejemplos de usos son la reproducción de música en segundo plano, la sincronización de datos con el servidor en el fondo sin interacción del usuario, etc.

AsyncTask Por otro lado, se usa para tareas de bloqueo de UI que se realizarán en un hilo separado. Es lo mismo que crear un nuevo hilo y hacer la tarea cuando todas las tareas de crear y mantener los hilos y enviar el resultado al hilo principal son atendidas por el AsyncTask . El uso de ejemplos está obteniendo datos del servidor, operaciones CRUD en el resolutor de contenido, etc.

+0

¿Puedes especificar por qué crees que tu respuesta agrega algo a la pregunta? – erikbwork

+1

otras respuestas son demasiado cortas o demasiado largas para que los principiantes las entiendan. así que respondí con palabras sencillas y sencillas con los ejemplos – arjun

3

servicio y asynctasks son casi haciendo la misma cosa, casi servicio .using o una AsyncTask depende de lo que es su requerimiento es.

como ejemplo si desea cargar datos en una vista de lista desde un servidor después de presionar un botón o cambiar de pantalla, es mejor que vaya con una asynctask.it se ejecuta en paralelo con el hilo ui principal (se ejecuta en segundo plano) .para ejecutar una actividad asynctack o su aplicación debe estar en el hilo principal de la interfaz de usuario. Después de salir de la aplicación, no hay asynctask.

Pero los servicios no son así, una vez que inicia un servicio puede ejecutarse después de salir de la aplicación, a menos que se detenga el servicio. Como he dicho, depende de sus necesidades. Si desea seguir revisando la recepción de datos o verifique el estado de la red continuamente, es mejor que vaya con el servicio.

happy coding.

+1

Hola, Ashana, ¿puedo preguntar por qué proporcionaste esta respuesta a una pregunta que ya está respondida? ¿No está satisfecho con la respuesta marcada existente? ¿O intenta construir un perfil SO al escribir su opinión sobre todas las preguntas sobre las que tiene algo que decir? ¿O algo completamente diferente? No puedo entenderlo, pero veo ese patrón bastante a menudo últimamente. – erikbwork

+1

ya sé que la respuesta ya está dada y no veo mucho problema aquí si doy la respuesta correcta o mi opinión aquí hermano? porque usted no es el único que busca la respuesta a la misma pregunta, si alguien es difícil de entender la solución en las respuestas anteriores, puede desplazarse hacia abajo y buscar una respuesta que se ajuste bien a ellos, comprenda fácilmente una. Lo dice. Gracias por el comentario hermano, no soy un genio o profesional en programación, solo quiero ayudar a otros, trato de enseñar a otros lo que ya sé :) –