20

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 ?

4

3 に答える 3

47

通常、アプリは、サービスにアクセスできる(またはサービスを使用できる)唯一のアプリです。このサービスがまだ実行されている状態でアプリを破棄すると、そのサービスには目的がなくなります。これは、メモリを消費するリソースに存在しますが、何もしません。完了時にサービスのバインドを解除または停止することにより、これらのリソースを返却して、他のアプリで使用できるようにします。

おもちゃを部屋全体に広げてから離れる子供を想像してみてください。家にいる他のすべての人(両親、兄弟、ゲスト)は彼らの役に立たず、すべてを歩き回らなければなりません。おもちゃは単に邪魔です。子供がそれらを片付ければ、誰でも好きなように部屋を使うことができます。

お役に立てば幸いです。

于 2012-09-06T21:17:14.017 に答える
41

これは、Android OSが破棄され、まだ実行中のにバインドされているActivityことを検出した場合に発生するため、破棄する前にサービスのバインドを解除する必要がありますServiceConnectionServiceActivity

于 2012-09-06T21:09:23.940 に答える
4

アクティビティが閉じられた後も、サービスは引き続き実行されています。したがって、onStopまたはonDestroyでリソースのバインドを解除する必要があります。

于 2015-04-12T11:41:32.070 に答える