2

複数のアクティビティで構成されるアプリがあります。すべてのアクティビティは、ローカル サービスにアクセスする必要があります。アプリ起動時にサービスを開始し、アプリ起動時にサービスを停止したい

a) アプリが破棄される (バックキー)

b) アプリが停止中 (ホームキー)

c) デバイスはディープ スリープ状態です (電源キー)

基本的に、目に見えるアクティビティがない場合、サービスは実行されるべきではありません。

onResume() のすべてのアクティビティでサービスをバインドし、onPause() のすべてのアクティビティでサービスのバインドを解除します。残念ながら、新しいアクティビティがバインドする前にサービスがバインド解除されるため、アクティビティを切り替えるたびにサービスが再作成されます。

それを防ぐ方法はありますか?

4

2 に答える 2

1

Context.BIND_AUTO_CREATE でバインドしていると仮定すると、ほぼ完了です。サービスを onStart() でバインドし、onStop() でアンバインドします。アプリケーションが最初のアクティビティから 2 番目のアクティビティに切り替わるため、最初のアクティビティが停止する前に 2 番目のアクティビティが開始されることがわかります。私は自分のアプリでこの手法を使用し、すべての on.. メソッドを記録しました。切り替えると、次の順序で発生します。

 FIRST Activity onCreate
 FIRST Activity onStart
 FIRST Activity onResume
 FIRST Activity onPause
 SECOND Activity onCreate
 SECOND Activity onStart
 SECOND Activity onResume
 FIRST Activity onStop

そのため、しばらくの間、2 つのアクティビティがサービスにバインドされますが、これはまったく害を及ぼしません。アクティビティがバインドされていない場合、サービスは停止します。

于 2012-04-17T19:25:51.253 に答える
0

これを見てください。

ただし、onStartCommand() コールバック メソッドを実装することを選択した場合は、サービスが開始されたと見なされるため、サービスを明示的に停止する必要があります。この場合、サービスは、クライアントにバインドされているかどうかに関係なく、サービスが stopSelf() で停止するか、別のコンポーネントが stopService() を呼び出すまで実行されます。

于 2012-04-17T19:18:33.770 に答える