バインドされたサービスの停止に関する多くの投稿を読んできましたが、ほとんどは Android API の誤解であり、私の質問に答えるものはありません。Android Developers Web サイトでも答えが見つかりませんでした (何かを見逃している可能性があります)。
開始とバインドの両方が可能なサービスがあります。stopService()
クライアントがまだサービスにバインドされている場合、への呼び出しはサービスを停止しないことを知っています(したがって、onDestroy()
呼び出されません)。
ただし、これでサービスが停止されなくても、呼び出されたときにサービスで何かをしたいと思いますstopService()
(その「開始」動作は単純な「バインド先」動作とは少し異なるため)。
サービスが既に開始されていてもonStartCommand()
が呼び出されるたびに が呼び出されることはわかっていますが、(サービスの開始時に) 1 回だけ呼び出されます。startService()
onCreate()
私が欲しいのは、まだバインドされているサービスの場合に が呼び出されなくても、 が呼び出さonStopCommand()
れるたびに呼び出されるのようなコールバックですが、私の知る限り、これは存在しませんか?stopService()
onDestroy()
私の問題を解決するために考えたオプションは次のとおりですが、どちらも好きではありません。
- サービスを 2 つのサービスに分割する (1 つは開始済み、1 つはバインド済み)
stop()
直前にどこでも呼び出す必要があるメソッドをサービスに実装しstopService()
ます (バインダーを介して実行できます)。
これらのソリューションについてどう思いますか? もっと良いアイデアはありますか?
編集:これは、私のサービスの「開始」動作と「バインド先」動作の違いのより詳細な説明です:
私のサービスを S1 としましょう。これには、バインドすることによって他のアクティビティやサービスからアクセスできる状態が含まれています。バインドのみが可能な別のサービス S2 があります。
から開始するstartService()
と、S1 は S2 にバインドして、S1 の状態を変更できる S2 のイベントをリッスンします。
で停止したときstopService()
に、S1 が S2 からバインド解除されるようにします (そして、その状態の更新を停止します)。とりあえず でやってonDestroy()
ます。
私の問題は、クライアントが S1 にバインドされている場合、S1 が停止せず、S2 からバインド解除されないことです。
私の問題を理解するのに役立つことを願っています。