java - saber - servicios en primer plano android studio
¿Cuándo usar un hilo/servicio en Android? (6)
Basta con mirar este bonito post Android Thread Constructs (Parte 4): Comparaciones .
o diferencia entre servicio, tarea asíncrona y subproceso? .
¿Cuándo se debe utilizar un hilo o un servicio?
¿Deben ser utilizados para la autenticación? Por ejemplo, en mi aplicación estaba considerando usar un subproceso o servicio (me autentico a través de Active Directory).
¿Tienes ejemplos de cuándo se utilizarían?
Creo que la principal diferencia es sobre 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 el servicio de eliminación como una última opción. 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 una parte importante que debe mantenerse. Así que los hilos habituales tienen muchas más posibilidades de morir.
Por ejemplo, si tiene una actividad que inicia un subproceso de trabajo y luego pasa a segundo plano, como Android no reconoce el subproceso como una parte de trabajo, puede pensar que la aplicación no hace nada, porque no hay actividad o servicio en ejecución y se detiene toda la aplicación, incluida la hilo de trabajo.
Se debe utilizar un subproceso en un proceso de ejecución prolongada que impida la actualización de la interfaz de usuario. Si es más de un segundo o dos, es posible que desee ponerlo en un hilo de fondo y notificar al usuario con un cuadro de diálogo o con una rueda giratoria o algo. Si bloquea el subproceso de la interfaz de usuario durante más de 5 segundos, el sistema operativo indicará al usuario una opción de "matar o esperar".
Un servicio no se ejecuta en un hilo separado, por lo que bloqueará la interfaz de usuario, pero puede generar un nuevo hilo dentro de un servicio. Un servicio se usa más para algo que debería suceder en un intervalo o seguir funcionando / verificando algo cuando no se muestra una IU.
Use el servicio si necesita algo que sea usado por otras aplicaciones o que sobreviva a las actividades de su aplicación. El buen ejemplo de servicio es la transferencia de archivos que puede llevar mucho tiempo y no quiere forzar al usuario a usar su aplicación durante este tiempo. Use hilo (generalmente a través de AsyncTask o similar) en otros casos.
Para fines de autenticación, AsyncTask
parece ser una buena opción.
Actualización: Parece que la documentación de Android ahora incluye una aclaración correspondiente, consulte http://developer.android.com/reference/android/app/Service.html#WhatIsAService .
Respuesta original:
En Android, un Service
no proporciona ninguna ejecución concurrente ("ejecutar en segundo plano"). En realidad, es más un simple objeto Java que simplemente se crea una instancia (y se administra) a través del sistema Android en lugar de su aplicación a través del new
.
La propiedad más importante de un servicio, por lo tanto, no es el aplazamiento de la carga de trabajo; Esto se puede lograr con hilos simples.
Lo que hace que un objeto de servicio sea especial es que está registrado con el sistema Android como un servicio . Esto le permite al sistema saber que este objeto proporciona algún tipo de servicio y debe mantenerse vivo el mayor tiempo posible, o hasta que se detenga. Los subprocesos de aplicaciones normales no tienen este significado especial para el sistema Android y se terminarán de manera mucho más generosa a discreción del sistema.
Por lo tanto, si necesita algunas actividades en segundo plano para continuar mientras su aplicación / Activity
está activa, un hilo puede hacer lo que necesita.
Si necesita un componente que se mantiene activo , no se purgará incluso cuando, después de un tiempo, el sistema Android decida eliminar sus Activities
de la memoria, debería ir al servicio, o incluso a un "servicio de primer plano", que se considera aún más Es importante para el sistema e incluso es menos probable que se cancele para recuperar recursos.
Por supuesto, si se desea, también se puede hacer que un objeto de Service
contenga una o más instancias de Thread
que podrían vivir tanto como el objeto de Service
sí.
Editar:
Más aún: un servicio es, por supuesto, el camino a seguir si desea proporcionar algunos servicios a otras aplicaciones, que pueden "vincularse" únicamente a un servicio.
Según la Guía del desarrollador de Android ( http://developer.android.com/guide/components/services.html#Basics ):
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 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, entonces 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 subproceso principal de su aplicación de forma predeterminada, por lo que aún debe crear un nuevo subproceso dentro del servicio si realiza operaciones intensivas o de bloqueo.