2012-09-06 10 views
15

Estoy escribiendo un servicio para mi aplicación de Android y estoy tratando de entender cómo funciona el mecanismo de enlace. Si Ato mi servicio en el onCreate de una actividad pero no desvincularla en onStop o OnDestroy, me sale el error:¿Qué significa perder una conexión de servicio?

android.app.ServiceConnectionLeaked: Service com.google.ipc.invalidation.ticl.android.AndroidInvalidationService has leaked ServiceConnection com.googl 
           e.i[email protected]4177f8f8 that was originally bound here 

Así que mi pregunta es: ¿cuál es el problema exactamente con una fuga de una conexión ¿Qué estoy previniendo al desvincular mi servicio?

Respuesta

33

que se produce cuando el sistema operativo Android destruye Activity y encuentra que un ServiceConnection todavía enganchan a un corredor Service, por lo que necesita Unbind el servicio antes de la destrucción de su Activity

+1

Para aclarar: el sistema usa el sistema de enlace para saber si un servicio se sigue utilizando o no. Es especialmente importante si no se llama a startService, ya que en ese caso es el marco el que lo matará, por lo que no desvincular un servicio cuando se destruye la actividad impide que el sistema lo haga de manera eficiente. – Teovald

41

Normalmente su aplicación es la única aplicación que puede acceder a su servicio (o tiene un uso para eso). Si destruyes tu aplicación con este Servicio aún ejecutándose, ese Servicio ya no tiene un propósito. Existirá en recursos que consuman memoria, pero sin hacer nada. Al desvincular o detener su Servicio cuando termina, devuelve estos recursos para que puedan ser utilizados por otras aplicaciones.

Piense en un niño que esparce sus juguetes por la habitación y luego se va. Todos los demás en la casa (los padres, hermanos e invitados) no tienen ningún uso para ellos y deben caminar alrededor de todo. Los juguetes están simplemente en el camino. Si el niño los guarda, cualquiera puede usar la habitación para lo que quiera.

Espero que ayude!

+7

+1! Una de las respuestas más útiles sobre el tema, especialmente debido a la * gran * analogía dada. – Swayam

+0

respuesta buena y fácilmente comprensible – Ranjit

+0

pero ¿y si quiero que siga funcionando mientras estoy usando otra actividad? He utilizado START_STICKY en mi servicio para hacer eso, pero si desactivo mi servicio se detendría ... (está descargando datos desde un dispositivo ble) – JourneyWithAndroid

2

Los servicios aún se están ejecutando incluso después de que se cierre la actividad. Por lo tanto, debe desvincular el recurso en onStop o onDestroy.

Cuestiones relacionadas