1

SO に関するさまざまな投稿を見つけて読みましたが、 (in an ) または(in a ) の代わりに - にgetApplicationContext()バインドするときに使用する必要があると述べています。ServicethisActivitygetActivity()Fragment

ただし、これにより次の質問が発生しました。ドキュメントでは、の「クライアント」について繰り返し説明していServiceます。/guide/components/bound-services.html )。

このコンテキストでのクライアントの意味:

  • Context呼び出しに使用されたbindService()
  • またはServiceConnectionに供給されたbindService()

Fragments同じものにバインドする2 つがあるとしましょうService- Application Context を使用し、それぞれに独自のServiceConnection.

サービスはいつ破棄されますか?

私の 2 番目の解釈が true のService場合、すべての接続が閉じられたとき、つまり各 Fragment が呼び出されたときに が破棄されgetActivity().getApplicationContext().unbindService(mConnection)ます。最初のフラグメントが真の場合、最初のフラグメントがその呼び出しを行うとすぐに閉じられる必要があります。これは、「アプリケーションコンテキストのバインドを解除する」ためです...

では、どの解釈が正しいのでしょうか。(2回目だといいのですが…)

4

1 に答える 1

2

getApplicationContext()生き残るために使用します。ServiceConnectionたとえば、アクティビティの向きが変わります (アクティビティが破棄されて再作成され、コンテキストも同様に変更されます)。ドキュメントによると、アクティビティが停止すると (破棄されずに)、サービスが切断される可能性があります。

「クライアント」とは、アクティブなServiceConnection. 誰もサービスに接続していない場合、そのサービスは不要になり、破棄されます ( によって開始された場合を除くstartService(...))。ServiceConnections はコンテキストではなくカウントされます。

上記のフラグメントが破棄された場合に接続が自動的に閉じるかどうかはテストしていません。アプリケーション コンテキストが存続するため、私の推測では NO ですonDestroy

于 2014-11-10T20:15:02.900 に答える