Service vs Thread en Android
Estoy buscando qué servicio se debe utilizar en Aplicaton android.
Docs dice
- Android: crea un servicio que se ejecuta una vez al día
- ¿Estoy consiguiendo los pasos correctos para verificar la suscripción de Android de un usuario en la aplicación?
- Envíe la solicitud a la parte posterior y traiga a frente
- Android en la facturación de la aplicación: Recepción onReceive nunca recibiendo llamadas incluso después de una compra exitosa
- ¿Cuáles son las ventajas y desventajas de ejecutar un servicio en un proceso diferente?
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
- ¿Cómo puedo eliminar una notificación de primer plano en Android Lollipop?
- StopSelf () vs stopSelf (int) vs stopService (Intención)
- Cómo utilizar Android LocationManager y Listener
- Servicios de Android: Bind on demand vs. Bind on #onCreate ()
- Android Service nunca parece iniciar - onStartCommand () no se llama
- Cómo utilizar AsyncTask en Servicios en Android?
- AlarmManager que repite la alarma que falta al azar cuando el teléfono no está en uso
- Servicio de Android
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,
- Advertencia de MediaPlayer de Android: Debería tener el controlador de subtítulos ya establecido
- No se pudo sincronizar el proyecto de Gradle