tipos studio stopservice startservice servicios segundo que plano intent ejemplo android

studio - servicio de inicio de servicios de Android() y bindService()



stopservice android (3)

Me gustaría saber si es posible tener un servicio que se inicie con startService y luego poder enlazar a ese servicio y hacer algunas llamadas a procedimientos remotos. de acuerdo con esto: http://developer.android.com/guide/topics/fundamentals.html#servlife

los dos servicios tienen un ciclo de vida diferente, por lo que no es posible, ¿alguien lo sabe?


Creo que la respuesta de hara fue un poco confusa. Lo que describe es perfectamente legítimo y, de hecho, es la única forma de obtener el comportamiento que desea. Si creas un servicio al vincularlo, morirá cuando te desvincules. Así que la única forma de mantenerlo sin actividades vinculadas a él es comenzar con startService (). No hay conflicto con los ciclos de vida porque solo se aplica a cómo se INICIÓ el servicio. Entonces, una vez que se inicia con startService (), sigue ese proceso de ciclo de vida. Por lo tanto, es libre de atarlo y desvincularlo tanto como desee y solo morirá cuando llame a stopService () o stopSelf ()


Sí, puede iniciar y vincular (una o más veces) el mismo servicio.

El siguiente diagrama de flujo muestra cómo se gestiona el ciclo de vida de un servicio. El contador variable rastrea el número de clientes vinculados:

Buen ejemplo - aplicación de música. Explicación de la construcción de un tutorial oficial de Media Browser Service :

Un servicio que solo está vinculado (y no iniciado) se destruye cuando todos sus clientes se desvinculan. Si su actividad de UI se desconecta en este punto, el servicio se destruye. Esto no es un problema si aún no has tocado música. Sin embargo, cuando comienza la reproducción, es probable que el usuario espere seguir escuchando incluso después de cambiar de aplicación. No querrás destruir el jugador cuando desenlazes la interfaz de usuario para trabajar con otra aplicación.

Por este motivo, debe asegurarse de que el servicio se inicie cuando comience a ejecutarse llamando a startService (). Un servicio iniciado debe detenerse explícitamente, esté o no vinculado. Esto asegura que su jugador continúe ejecutándose incluso si la actividad de la interfaz de usuario controladora se desenlaza

Para detener un servicio iniciado, llame a Context.stopService () o stopSelf (). El sistema se detiene y destruye el servicio lo antes posible. Sin embargo, si uno o más clientes aún están vinculados al servicio, la llamada para detener el servicio se retrasa hasta que todos sus clientes se desvinculen.

Desde el ref:

Un servicio puede iniciarse y tener conexiones vinculadas a él. En tal caso, el sistema mantendrá el servicio en ejecución siempre que se inicie o haya una o más conexiones con el indicador Context.BIND_AUTO_CREATE. Una vez que no se cumple ninguna de estas situaciones, se llama al método onDestroy () del servicio y el servicio se termina de manera efectiva.


Si inicia un servicio utilizando startService (), debe detenerlo utilizando stopService() .

Hay dos razones por las que el sistema puede ejecutar un servicio. Si alguien llama a Context.startService (), el sistema recuperará el servicio (lo creará y llamará a su método onCreate () si es necesario) y luego llamará a su método onStartCommand (Intent, int, int) con los argumentos proporcionados por el cliente. En este punto, el servicio continuará ejecutándose hasta que se llame a Context.stopService () o stopSelf (). Tenga en cuenta que varias llamadas a Context.startService () no se anidan (aunque sí dan lugar a múltiples llamadas correspondientes a onStartCommand ()), por lo que no importa cuántas veces se inicie un servicio se detendrá una vez que Context.stopService () o stopSelf () se llama; sin embargo, los servicios pueden utilizar su método stopSelf (int) para garantizar que el servicio no se detenga hasta que se hayan procesado los intentos iniciados.

Puede enlazar con el servicio tantos ServiceConnection como desee con bindService() , pero preste atención a la bandera que le pasó. Si pasa 0, entonces, si llama a stopService (), el servicio se detendrá (no sé exactamente qué le sucede a su ServiceConnection). De lo contrario, si desea que su servicio esté activo hasta que ServiceConnection esté vinculado a él, use BIND_AUTO_CREATE .

esto es de stopService ():

Solicitar que se detenga un servicio de aplicación dado. Si el servicio no se está ejecutando, no pasa nada. De lo contrario se detiene. Tenga en cuenta que las llamadas a startService () no se cuentan, esto detiene el servicio sin importar cuántas veces se inició.

Tenga en cuenta que si un servicio detenido aún tiene objetos ServiceConnection vinculados a él con el conjunto BIND_AUTO_CREATE, no se destruirá hasta que se eliminen todos estos enlaces. Consulte la documentación del Servicio para obtener más detalles sobre el ciclo de vida de un servicio.

Esta función lanzará la excepción SecurityException si no tiene permiso para detener el servicio dado.

espero que esto ayude..