¿Por qué desvincular Service onDestroy?
He visto que se menciona en múltiples fuentes, que si una actividad enlaza un servicio, debe desvincularlo enDestroy. ¿Por qué? Dado que la actividad se destruye, parece que el servicio será desvinculado de todos modos. Si fue "iniciado" – no importa de todos modos. Y si se inició automáticamente por la actividad – se cerrará de todos modos si no otros vinculados.
Entonces, ¿por qué desvincularlo?
- IntentService's onHandleIntent (Intent) obtiene nulo argumento
- ¿Cómo seguir reproduciendo música en segundo plano después de que el usuario haga desaparecer la aplicación?
- Quiero reproducir un audio. ¿Utilizo Thread, AsyncTask o Service?
- Servicio vs IntentService
- Ejecutar aplicación en segundo plano cuando el teléfono en Doze
- ¿Cómo afecta el modo doze a los servicios de fondo / primer plano, con / sin wakelocks parciales / completos?
- Descarga de datos y actualización de la interfaz de usuario
- ¿Cómo dirigir la queja de la pelusa del android sobre las implementaciones exportadas del servicio de la mensajería de Firebase?
- ¿Cómo obtengo el nombre de una clase de servicio en Android?
- Android: IntentService no hace cola correctamente
- Iniciar la aplicación de Android sin actividad principal e iniciar el servicio al iniciar la aplicación
- Cómo evitar que el servicio se ejecute de nuevo si ya está ejecutando android
- Permitir cancelación de la notificación después de llamar a stopForeground (false)
Las actividades deben gestionar los cambios de configuración, como cuando se gira la pantalla o el usuario cambia las configuraciones locales o el dispositivo entra en el modo nocturno.
El comportamiento predeterminado de la actividad de primer plano, cuando se produce un cambio de configuración, es que se destruya y se vuelva a crear.
Como resultado, llamar a bindService()
en una Activity
no es una buena idea. Queremos que el enlace permanezca intacto a través del cambio de configuración. De lo contrario, nuestro servicio será destruido y recreado, junto con la actividad (suponiendo que la actividad tiene el único enlace y nada más comenzó el servicio).
Por lo tanto, el patrón recomendado es llamar a bindService()
en el singleton de Application
. A continuación, puede pasar su ServiceConnection
desde la instancia de actividad anterior a la nueva instancia de actividad. Los fragmentos retenidos funcionan bien para esto, ya que entonces se puede llamar unbindService()
en onDestroy()
del fragmento , de modo que cuando la actividad es "permanentemente" destruida (por ejemplo, el usuario pulsa BACK, llama finish()
ser liberado.
Con todo eso como fondo, a su preocupación específica.
En primer lugar, se supone que una actividad destruida automáticamente se desvincula de los servicios a los que se enlazó a través de bindService()
llamados a esa Activity
. Es posible que esto suceda, aunque no recuerdo que el comportamiento documentado, y es el tipo de cosa que los desarrolladores no deben confiar.
Más importante aún, en la mayoría de los casos, llamar a bindService()
en la Activity
no es el enfoque correcto. De lo contrario, entrar en los problemas que he descrito anteriormente.
Pero, siguiendo el bindService()
-en-la- Application
, no esperaría que alguna vez haya algún tipo de desvinculación automática, ya que el Singleton de Application
nunca se destruye. Por lo tanto, si no llama a unbindService()
algún lugar (por ejemplo, en onDestroy()
del fragmento retenido), perderá su servicio.
- GoogleApiClient tiene un Plus.API opcional y no está conectado a Plus con el nuevo signo de Google introducido en Play Services 8.3
- El método onDestroy () de la actividad no se llama después de eliminar la actividad del fondo pasando