2012-04-17 33 views
2

私は複数のアクティビティで構成されるアプリケーションを持っています。すべてのアクティビティはローカルサービスにアクセスする必要があります。私は、アプリを起動したときにサービスが開始されるようにしたい、とAndroidサービスの開始/停止

a)はアプリケーションが破壊されたときに停止(バックキー)

b)のアプリケーションが停止している(ホームキー)

C)デバイスが深いスリープ状態にある(電源キー)

基本的に、表示されているアクティビティがないときは、サービスを実行しないでください。

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

これを防止する方法は誰にもありますか?

答えて

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つのアクティビティがサービスにバインドされていますが、これはまったく問題ありません。アクティビティがバインドされていない場合、サービスは停止します。

+0

ありがとう、それは私が探していたものです! – osiris81

0

thisをご覧ください。あなたはonStartCommand()コールバック メソッドを実装することを選択した場合は、サービス を今すぐ開始していると考えられるので、

しかし、あなたは明示的に、サービスを停止する必要があります。この場合、サービスは まで実行され、サービスはstopSelf()で停止するか、別のコンポーネントはクライアントにバインドされているかどうかにかかわらず stopService()を呼び出します。

関連する問題