Service vs Thread en Android

Estoy buscando qué servicio se debe utilizar en Aplicaton android.

Docs dice

Un servicio es un componente de aplicación que puede realizar operaciones largas en segundo plano y no proporciona una interfaz de usuario.

He leído este hilo hilos de aplicación vs hilos de servicio que dicen que los mismos servicios son para la operación en funcionamiento en segundo plano.

Pero aquí esto se puede hacer usando Thread también. Cualquier diferencia entre ellos y donde debe usarlos

Un servicio está destinado a ejecutar su tarea independientemente de la Activity , que le permite ejecutar cualquier tarea en segundo plano. Esto se ejecuta en el hilo de interfaz de usuario principal, por lo que cuando desea realizar cualquier operación de red o de carga pesada, entonces usted tiene que utilizar el Thread allí.

Ejemplo: Supongamos que desea tomar copia de seguridad de sus mensajes instantáneos diariamente en segundo plano, entonces aquí usted usaría el Service .

Threads es para ejecutar la tarea en su propio hilo en lugar del hilo principal de la interfaz de usuario. Se utilizaría cuando se desea realizar una operación de red intensa como el envío de bytes al servidor de forma continua y se asocia con los componentes de Android. Cuando tu componente destruye quien empezó esto, entonces deberías detenerlo también.

Ejemplo: está utilizando el Thread en la actividad para algún propósito, es una buena práctica detenerlo cuando su actividad destruya.

UPDATE basado en la documentación más reciente:

Android ha incluido en su documentación sobre cuándo debe utilizar Service vs Thread. Aquí está lo que dice:

Si necesita realizar trabajos fuera de su hilo principal, pero sólo mientras el usuario interactúa con su aplicación, probablemente debería crear un nuevo hilo y no un servicio. Por ejemplo, si desea reproducir música, pero sólo durante la ejecución de su actividad, puede crear un subproceso en onCreate (), comenzar a ejecutarlo en onStart () y, a continuación, detenerlo en onStop (). Considere también utilizar AsyncTask o HandlerThread, en lugar de la clase Thread tradicional. Consulte el documento Processes and Threading para obtener más información acerca de los subprocesos.

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

Otra diferencia notable entre estos dos enfoques es que Thread se duerme si su dispositivo duerme. Mientras que, el servicio puede realizar la operación incluso si el dispositivo va a dormir. Tomemos por ejemplo la reproducción de música utilizando ambos enfoques.

Enfoque de subprocesos: la música solo se reproducirá si su aplicación está activa o si la visualización en pantalla está activada.

Enfoque de servicio: la música aún puede reproducirse aunque minimice la aplicación o la pantalla esté desactivada.

Documentación de Android – Servicios

  • App visible Y operación dependiente del contexto de la aplicación (depende de la actividad visible) – use Thread
  • App visible Y operación independiente en el contexto de la aplicación – use Service
  • App not visible – servicio

Probablemente ya has leído la descripción de la documentación acerca de ellos, no voy a repetir, en su lugar voy a tratar de dar respuesta con mis propias palabras, espero que le ayudará.

El servicio es como una actividad, pero no tiene interfaz. Probablemente, si quieres buscar el clima, por ejemplo, no crearás una actividad en blanco para él, para ello usarás un Servicio.

Un hilo es un hilo, probablemente usted ya lo sabe de otra parte. Debe saber que no puede actualizar la interfaz de usuario desde un subproceso. Necesitas usar un Handler para esto, pero lee más.

Referencia desde https://developer.android.com/guide/components/services.html

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

Si necesita realizar trabajos fuera de su hilo principal, pero sólo mientras el usuario interactúa con su aplicación, probablemente debería crear un nuevo hilo y no un servicio.

Por ejemplo, si desea reproducir música, pero sólo durante la ejecución de su actividad, puede crear un subproceso en onCreate (), comenzar a ejecutarlo en onStart () y, a continuación, detenerlo en onStop ().

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

Un servicio de Android es un componente de aplicación que se puede ejecutar en segundo plano, incluso cuando los usuarios no interactúan con la aplicación. Si necesita realizar trabajos fuera de su hilo principal de la interfaz de usuario, pero sólo mientras el usuario interactúa con la interfaz de usuario de la aplicación, es cuando debe crear un objeto de hilo de Android dentro de esa clase en su aplicación.

Los procesos de Android que contengan una subclase de Servicio se priorizarán más que los procesos que utilizan una actividad de procesamiento en segundo plano (objeto Thread). Por esta razón, si sus aplicaciones van a realizar operaciones extensas de procesamiento, acceso o transmisión, entonces deseará iniciar una subclase de componente de servicio para esa operación, en lugar de simplemente crear un objeto de subclase de subprocesos como AsyncTask.

Por lo tanto, la principal razón por la que deseará usar una subclase de Servicio en un objeto Thread es porque el uso del componente Servicio garantizará que su operación de procesamiento tendrá al menos el nivel de prioridad del proceso de servicio, independientemente de lo que suceda con su subclase Activity. Si utiliza el enfoque de subclase de subprocesos, su aplicación podría quedar por debajo del nivel de prioridad del proceso de servicio basado en el uso o la interacción del usuario final, ya que con ese enfoque,

  • Null intent redelivered to Service onStartCommand ()
  • Servicio de grabación / procesamiento de llamadas! - Android
  • Android: ¿Cómo ejecutar el servicio cuando la aplicación es visible?
  • Guardar el estado del servicio enlazado antes de que sea eliminado por Android
  • ¿Es posible tener Android Voice Recognition (como un servicio personalizado) en Google Glass?
  • ASmack como servicio
  • ¿Android mata cada servicio o el proceso entero?
  • Evitar que algunos usuarios cierren el servicio de Android
  • Cómo detener el servicio de su propia notificación de primer plano
  • Cómo pasar un contexto de actividad en una aplicación a un servicio en otra aplicación
  • Problema al ejecutar un script desde init.rc en el arranque del dispositivo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.