4

アクティビティ A がサービス S を開始し、サービス S にバインドするとします。

  1. Aが破壊されたとき、Sはどうなりますか?

  2. S にバインドする別のアクティビティを再作成するにはどうすればよいですか? http://developer.android.com/guide/components/bound-services.htmlのサンプル コードでは、onStop() でサービスのバインドを解除しています。アプリを再度開くと、A と S の別のインスタンスに対して新しいプロセスが作成されると思います。ただし、新しいアクティビティで古いサービスからデータを取得する必要があります。

4

2 に答える 2

4
What will happen to S when A is destroyed?

A が S にバインドされた唯一のアクティビティであり、 を介してサービスを開始しなかった場合startService(Intent)、S は破棄されます。これは、サービスは、最後にバインドされたアクティビティがサービスから解放されるまで存続するためです。これはここに文書化されています。

How can I recreate another Activity that binds to S?

A がバインドされていて、インテントを介してアクティビティ B に切り替えると、サービスは破棄され、B がバインドされたときに再作成されます。

アクティビティがバインドされていなくてもサービスを有効にしたい場合は、 でサービスを呼び出す必要がありますstartService(Intent)。明示的に停止するか、システムがそれを破棄する時が来たことを意味する場合、それは回避されます。この動作が望ましくない場合は、データを永続化し、特定の時間にアクセスしてください。

I think if I open the app again, a new process is created for another instance of A and S

プロセスがシステムから強制終了されるまで、または推奨されていないプロセスを強制終了するまで、プロセスは同じままです。

編集:

バインドされたサービス ライフサイクルのみがアクティビティに依存します。スタンドアロンが必要な場合は、1 回使用してstartService()ください。このように、アクティビティから独立しており、アプリのプロセスが稼働している限り、または明示的にサービスを停止している限り、バックグラウンドで実行されますstopService() / stopSelf()。独自のアプリでサービスを使用し、IPC を使用してアプリ間で通信することもできます。それはすべてユースケースの問題です。

ご覧のとおり、サービスの構成は非常に柔軟であり、アプリに最適なものを決定する必要があります。

于 2013-09-13T09:55:08.647 に答える
0

サービスを開始するstartService()と、アクティビティが終了した後も残ります。それを介してサービスを開始するbindService()と、最後のアクティビティがそれから解放されるまで存続します。また、サービスがすでに開始されていて、サービスの新しいインスタンスを呼び出すとstartService()、サービスの新しいインスタンスは作成されませんが、生きているサービス メソッドonStartCommand()が実行されます。リビングサービスにバインドした場合とほぼ同様に、メトンonBind()が実行されます。

于 2013-09-13T06:38:22.233 に答える