2012-03-15 12 views
16

Estoy confundido con los servicios de Android y el hilo de Java.¿Por qué debería utilizar el servicio de Android en lugar de hilo de Java

Por favor, ayúdame a entender en qué situación debería usarlos.

Según mi entendimiento

servicio se ejecutan en segundo plano, para hacer hilo.

El servicio se va a utilizar para actividades como el funcionamiento de la red o la reproducción de mp3 en segundo plano, también lo hacen los hilos.

¿Cuál es la diferencia real entre ellos y cuándo usar cada uno de ellos?

+1

No estoy seguro si su pregunta está restringida a Android, es una cuestión de diferencia entre hilos y procesos en general (imagino que los servicios de Android son procesos separados que mantiene el sistema operativo cuando su propio proceso está inactivo/asesinado/detenido ...) – Ali

+0

** Es ** específico para Android. El servicio es un componente de la aplicación. Es el término de Android. Los componentes de aplicación de Android son procesos muy específicos. Los servicios son más específicos. Los hilos en Android son específicos, también, no puedes usarlos en algunos casos (GUI). – Gangnus

+1

Lea [Procesos e hilos] (http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html), [¿Qué es un servicio?] (Http://developer.android.com /reference/android/app/Service.html#WhatIsAService) y [¿Debería usar un servicio o un hilo?] (http://developer.android.com/guide/topics/fundamentals/services.html#Basics). – yorkw

Respuesta

5

Siempre: Un servicio de su aplicación se puede usar no solo por otros componentes de su aplicación, sino también por otras aplicaciones.

Un servicio es para usar en partes del programa que no son GUI.

Mayormente: Un servicio es algo más independiente que un hilo. El servicio es algo más longevo que un hilo. El servicio es algo más complejo que un hilo.

Por cierto, los hilos no se ejecutan solo en segundo plano. Lo que se ejecuta en primer plano, es un hilo, también.

1

Android Service ¡No se ejecute en un proceso separado (de forma predeterminada) e incluso no se ejecute en un hilo separado! Se ejecuta en el hilo principal (subproceso de la interfaz de usuario) de la aplicación, por lo tanto, si desea realizar alguna tarea que requiera mucho tiempo en el Service, inicie un hilo por separado, o use IntentService.

34

Déjame darte una analogía.

Las actividades y los servicios son como proyectos.

Las actividades son como proyectos externos. Esto es lo que ven los clientes (usuarios).

Los servicios son como proyectos internos. Puede haber varios proyectos internos para 1 proyecto externo o ninguno en absoluto.

Puede "pausar" un proyecto externo pero el proyecto interno que lo admite aún puede continuar.

Tema principal es como el jefe en una empresa

El jefe nunca debe ser obstaculizada con mucho trabajo, ya que no debe llegar tarde a las reuniones de la interfaz de usuario (congelación) o el cliente (usuario) se ser infeliz

Los hilos son como los empleados de una empresa.

Cuanto más tenga, más cosas podrá hacer al mismo tiempo, siempre que tenga suficiente equipo (velocidad de CPU) para todas ellas.

Múltiples empleados pueden trabajar en el mismo proyecto al mismo tiempo pero el jefe realmente debería trabajar solo en las actividades.

+0

Ejemplo genial ... – John

4

Los servicios son más análogos a una actividad sin cabeza.

Lo importante es comprender que un servicio se trata de administrar la vida útil de la aplicación y la capacidad de seguir trabajando cuando su aplicación no está en primer plano (no hay una interfaz de usuario visible). También se trata de proporcionar la capacidad de exponer la funcionalidad a otras aplicaciones.

http://developer.android.com/reference/android/app/Service.html#WhatIsAService

Por lo general cuando se inicia un servicio también puede iniciar un subproceso de trabajo. Existen configuraciones en el manifiesto que pueden hacer que un Servicio se inicie en un Proceso nuevo, pero generalmente no es necesario, hace que la comunicación con su servicio sea más difícil.

Utilice un subproceso justo en su actividad cuando necesite descargar el trabajo del subproceso de la interfaz de usuario mientras la aplicación está en primer plano, pero este trabajo puede detenerse cuando ya no está en primer plano. (Es posible que su aplicación continúe ejecutándose cuando no esté en primer plano, pero no hay garantía dependiendo de una serie de factores). En términos generales, Android puede matar su actividad si no está en primer plano, y si su proceso de aplicación tiene no Actividades o Servicios se puede matar.

Utilice un servicio con un subproceso para hacer el trabajo que tendrá lugar mientras su aplicación está en segundo plano y desea una mejor garantía de por vida.

Utilice un servicio para exponer la funcionalidad que no sea de la interfaz de usuario a otras aplicaciones.

6

Creo que la principal diferencia está en la actitud del sistema Android. El servicio es una parte de la infraestructura de Android, por lo que Android reconoce el servicio como una parte funcional de la aplicación y considera la eliminación del servicio como última opción. Además, si el servicio se cancela (por ejemplo, debido a la falta de memoria), puede decir que el sistema se reinicia automáticamente, siempre que haya recursos disponibles nuevamente. Además, puede ajustar la prioridad del servicio para hacerlo tan importante como la actividad de primer plano. En cuanto a los hilos, Android no reconoce un hilo como parte importante que debe mantenerse. Así que los hilos usuales tienen muchas más posibilidades de ser asesinados eventualmente.

Por ejemplo, si tiene una actividad que inicia un hilo de trabajo y luego pasa a segundo plano, como android no reconoce el hilo como parte activa, puede pensar que la aplicación no hace nada, porque no hay actividad o servicio ejecutando y matando a todo aplicación, incluido el hilo de trabajo.

Por lo tanto, cuando inicia un Servicio, le está diciendo al sistema algo así como: "Hola, estoy haciendo negocios aquí, no me maten hasta que termine, por favor". y Android presta atención a tu solicitud.

2

De acuerdo con la Guía de desarrolladores de Android (http://developer.android.com/guide/components/services.html#Basics):

Un servicio es simplemente un componente que se puede ejecutar en segundo plano, incluso cuando el usuario no está interactuando con la aplicación. Por lo tanto, debe crear un servicio solo si eso es lo que necesita.

Si necesita realizar un trabajo fuera de su hilo principal, pero solo mientras el usuario está interactuando con su aplicación, probablemente debería crear un nuevo hilo y no un servicio. Por ejemplo, si desea reproducir algo de música, pero solo mientras su actividad se está ejecutando, puede crear un hilo en onCreate(), comenzar a ejecutarlo en onStart() y luego detenerlo en onStop(). También considere usar AsyncTask o HandlerThread, en lugar de la clase Thread tradicional. Consulte el documento Procesos y subprocesos para obtener más información acerca de los subprocesos.

Recuerde que si utiliza un servicio, aún se ejecuta en el hilo principal de su aplicación de forma predeterminada, por lo que debe crear un nuevo hilo dentro del servicio si realiza operaciones intensivas o de bloqueo.

Cuestiones relacionadas