1

バインドされたサービスの停止に関する多くの投稿を読んできましたが、ほとんどは Android API の誤解であり、私の質問に答えるものはありません。Android Developers Web サイトでも答えが見つかりませんでした (何かを見逃している可能性があります)。

開始とバインドの両方が可能なサービスがあります。stopService()クライアントがまだサービスにバインドされている場合、への呼び出しはサービスを停止しないことを知っています(したがって、onDestroy()呼び出されません)。

ただし、これでサービスが停止されなくても、呼び出されたときにサービスで何かをしたいと思いますstopService()(その「開始」動作は単純な「バインド先」動作とは少し異なるため)。

サービスが既に開始されていてもonStartCommand()が呼び出されるたびに が呼び出されることはわかっていますが、(サービスの開始時に) 1 回だけ呼び出されます。startService()onCreate()

私が欲しいのは、まだバインドされているサービスの場合に が呼び出されなくても、 が呼び出さonStopCommand()れるたびに呼び出されるのようなコールバックですが、私の知る限り、これは存在しませんか?stopService()onDestroy()

私の問題を解決するために考えたオプションは次のとおりですが、どちらも好きではありません。

  1. サービスを 2 つのサービスに分割する (1 つは開始済み、1 つはバインド済み)
  2. stop()直前にどこでも呼び出す必要があるメソッドをサービスに実装しstopService()ます (バインダーを介して実行できます)。

これらのソリューションについてどう思いますか? もっと良いアイデアはありますか?

編集:これは、私のサービスの「開始」動作と「バインド先」動作の違いのより詳細な説明です:

私のサービスを S1 としましょう。これには、バインドすることによって他のアクティビティやサービスからアクセスできる状態が含まれています。バインドのみが可能な別のサービス S2 があります。

から開始するstartService()と、S1 は S2 にバインドして、S1 の状態を変更できる S2 のイベントをリッスンします。

で停止したときstopService()に、S1 が S2 からバインド解除されるようにします (そして、その状態の更新を停止します)。とりあえず でやってonDestroy()ます。

私の問題は、クライアントが S1 にバインドされている場合、S1 が停止せず、S2 からバインド解除されないことです。

私の問題を理解するのに役立つことを願っています。

4

1 に答える 1

1

これは存在しませんよね?

あなたは正しいです-それは存在しません。

これは存在しませんよね?

どちらも機能するはずです。私たちはあなたのアプリについてあまり知らないので、どちらが好ましいかを示すことは困難です.

もっと良いアイデアはありますか?

いずれかのパターンのみを使用してください。コマンドとバインディング パターンの両方を必要とするサービスはほとんどありません。

于 2013-03-21T18:36:50.183 に答える