私は音楽を再生するためにアンドロイドアプリを開発中です。音楽を再生するためのAndroidサービス:なぜSTART_STICKYですか?
これまでのところ、私はEclipseのツールチップに「このモードはバックグラウンドミュージック再生を実行するサービスが意味をなさない」ため、あまり考えずに音楽を再生するサービスのonStartCommand
からSTART_STICKY
を返しました。
このメソッドが最初に行うことは、それが意図されているもの(再生、停止、次の曲、...)を見ていることです。
最近、音楽を再生しながらアプリを殺したとき(最近のアプリの概要で画面からドラッグして)、アプリがクラッシュしました。ログファイルを見ると、onStartCommand
(ApllicationsとServiceのonCreate
メソッドが呼び出された後)のインテントにアクセスしようとすると、NullPointerExceptionがスローされたことがわかりました。
if (intent == null){
stopSelf();
return START_NOT_STICKY;
}
しかし、再びSTART_STICKY
とSTART_NOT_STICKY
の説明を読んだ後、私は疑問に思って:なぜSTART_STICKY
は、音楽プレーヤーのために推奨されるだろう
私の最初の反射がゆえonStartCommand
方法の先頭に挿入することでしたか?
2つの違いは、START_STICKY
で開始されたサービスが強制終了された場合、そのサービスは再起動されます(intent = null)。 START_NOT_STICKY
とすると、サービスは(ユーザーが要求しない限り)再起動されないため、常にインテントで呼び出され、nullであるかどうかを確認する必要はありません。
ユーザーがアプリを強制終了すると、サービスを再開しないようにすることは明らかです。
他のケースでは、サービスが再起動される可能性があるのは、リソースが不足しているためにサービスがシステムによって強制終了された場合です。そのような場合でも、一部のリソースが利用できるようになったため、ユーザーが音楽を予期せずに再生したいとは思わないと思います。
次の二つの答えは、リターンコードは、プロセスが殺された場合は、サービスを再起動する必要があるかどうかよりも、他の意味を持たないことを意味するもの:
- What is START_STICKY,START_NOT_STICKY and START_REDELIVER_INTENT Service
- START_STICKY and START_NOT_STICKY
はなぜSTART_STICKY
音楽プレーヤーにおすすめですか?
音楽を再生すると、音楽が他のアプリをしている間にバックグラウンドで実行し続けることになっている場合でも、MediaPlayerのクラス – Anonymous
@Anonymousを使用するときにサービスが作成された新しいservice.Alreadyを必要としません。前景? – jakun
はい、デフォルトではバックグラウンドで実行されています。音楽は、ユーザーがメモリから最新のアプリケーションをクリアしたときにのみ停止します。 – Anonymous