2012-09-06 7 views
15

私は自分のAndroidアプリケーション用のサービスを書いています。私はバインディングメカニズムの仕組みを理解しようとしています。 は、私が活動ののonCreateで私のサービスを結合するが、私はonStopまたはonDestroyでそれをアンバインドしていない場合、私はエラーを取得:サービス接続がリークするのはどういう意味ですか?

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 

だから私の質問は次のとおりです。問題は、正確な接続をリークして何です私のサービスを解除することで何を防ぐのですか?

答えて

33

のAndroid OSがActivityを破壊し、ServiceConnectionがまだ実行中Serviceにバインドさことを発見し、あなたがあなたのActivity

+1

明確にする:システムは、バインディングシステムを使用して、サービスがまだ使用されているかどうかを確認します。そのような場合、startServiceが呼び出されない場合は特に重要です。その場合、アクティビティが破棄されたときにサービスのバインドを解除しないと、システムがこれを効率的に実行できなくなります。 – Teovald

41

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

おもちゃを部屋の中に広げてから去っていく子供を考えてみましょう。家の中の他の人(両親、兄弟、ゲスト)はそれらのために役に立たず、すべてを歩かなければなりません。おもちゃはちょうど途中です。子供がそれらを離して置くと、誰でも自由に部屋を使うことができます。

希望に役立ちます!

+7

+1!トピックに関する最も有益な回答の1つ、特に与えられた*偉大な類推によるものです! – Swayam

+0

良いとわかりやすい答え – Ranjit

+0

しかし、私は他の活動を使っている間、それを稼働させ続けたいのですが。私は私のサービスでSTART_STICKYを使用していましたが、私のサービスをアンバインドすると、サービスが停止します。(これはブザーデバイスからデータをダウンロードしています) – JourneyWithAndroid

2

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

関連する問題