Cómo desvincular correctamente los servicios

Tengo un servicio que está enlazado con BIND_AUTO_CREATE a mi actividad y se inicia con START_STICKY. No llamo explícitamente startService ().

Puesto que el método onDestroy () no siempre se llama cuando mi actividad se mata y el método onStop () no es viable ya que no quiero que mi servicio se detenga cuando el usuario simplemente presiona el botón Inicio, no sé cuándo Desvincular mi servicio.

Estas son mis preguntas:

  1. Si quiero que mi Servicio se ejecute cuando mi Actividad está viva y para dejar de matar a mi Actividad, ¿dónde debo desvincular mi Servicio?

  2. Cuando el método onDestroy () se llama actualmente y llamo unbindService (), el método onUnbind () del servicio no se activa. ¿Por qué?

No llamo explícitamente startService ()

En ese caso, no tiene sentido anular onStartCommand (y devolver START_STICKY ) ya que no se llamará.

1.Si quiero que mi Servicio se ejecute cuando mi Actividad está viva y para detenerme cuando mi Actividad sea asesinada, ¿dónde debo desvincular mi Servicio?

Si no quieres hacerlo en onPause , puedes desvincularte en onDestroy , eso está bien. En una rara situación en la que su actividad se asesina sin onDestroy será desatada por Android, (por lo que su servicio será desatado y destruido correctamente también), como se indica aquí :

Cuando su cliente es destruido, se desvinculará del servicio

Como para

2. Cuando el método onDestroy () se llama actualmente y llamo unbindService (), el método onUnbind () del servicio no se activa. ¿Por qué?

Sugiero que usted tiene a alguien vinculado a ella, de lo contrario onUnbind debe ser llamado. Trate de poner un punto de interrupción en este método y verificar que se golpea. Además, compruebe que su servicio onDestroy se llama en esta situación.

  • Cómo detener un IntentService mientras hay muchos IntentService en ejecución
  • Servicio de grabación / procesamiento de llamadas! - Android
  • Antecedentes Proceso para escanear la ubicación del usuario a intervalos regulares y actualizar la base de datos local incluso cuando la aplicación no está abierta
  • Android: El servicio se detiene cuando la actividad está cerrada
  • Cómo ejecutar un servicio todos los días al mediodía, y en cada inicio
  • Android: servicio destruido cuando se gira la pantalla
  • Puntero nulo en getApplicationContext ()
  • Android - Obtención de contexto de un receptor de difusión onReceive () para enviar a
  • Se muere la conexión de servicio XMPP
  • ActivityManager # getRunningServices devuelve el servicio que se detiene manualmente
  • Utilizar Otto para actualizar un listadapter de un GcmListenerService
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.