Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does it mean to leak a service connection?

Tags:

I am writing a service for my Android app and I am trying to understand how the binding mechanism works. If I bind my service in the onCreate of an activity but I don't unbind it in onStop or onDestroy, I get the error :

android.app.ServiceConnectionLeaked: Service com.google.ipc.invalidation.ticl.android.AndroidInvalidationService has leaked ServiceConnection com.googl
                              e.ipc.invalidation.external.client.android.service.ServiceBinder$1@4177f8f8 that was originally bound here

So my question is : what is the problem exactly with leaking a connection, what am I preventing by unbinding my service ?

like image 535
Teovald Avatar asked Sep 06 '12 21:09

Teovald


2 Answers

That happens when Android OS destroys Activity and finds that a ServiceConnection still bound to a running Service, so you need to unbind the service before destroying your Activity

like image 24
Mohammad Ersan Avatar answered Dec 15 '22 04:12

Mohammad Ersan


Typically your app is the only app that can access your Service (or have a use for it). If destroy your app with this Service still running then that Service no longer has a purpose. It will exist in memory consuming resources but doing nothing. By unbinding or stopping your Service when you are done, you return these resources so that they can be used by other apps.

Think of a child that spreads their toys across a room and then leaves. Everyone else in the house (the parents, siblings and guests) has no use for them and must walk around everything. The toys are simply in the way. If the child puts them away, then anyone can use the room for whatever they want.

Hope that helps!

like image 169
Sam Avatar answered Dec 15 '22 04:12

Sam