私は別のスレッドで音楽をストリーミングしています。私がアプリを残すと(onPause()
、onStop()
など)、音楽は引き続き再生されますが、最終的には他のアプリを開いてそれらを切り替えてホーム画面に戻った後、私のアプリは殺されます。クラッシュはありません。logcatのWIN DEATH
とprocess com.myapp.android has died
です。明らかに、リソースを回収するために、システムによってアプリケーションが破壊されることは正当です。別のスレッドのMediaPlayerとstartForeground()経由のサービスで実行中
私の質問は:メイン(UI)スレッドからのスレッドで実行中のものは、システムに関する限り優先度が低くなっているということですか?メディアプレーヤーをService
で実行しても、startForeground()
を使用してフォアグラウンドでサービスを実行する場合よりも、それはより多く殺される可能性がありますか?
ご意見やご要望をいただければ幸いです。
EDIT
はまた、サービス上のドキュメントの一部は、私を混乱させる。適切な部分では、それは述べて:
注意:サービスは独自のスレッドを作成しません。そのホストプロセス- サービスのメインスレッドで実行され、特に指定しない限り( 別のプロセスで実行されません。 )。これは、 サービスがCPU集約的な作業を行うか、または 操作(MP3再生やネットワーキングなど)をブロックする場合、その作業のためにサービス内に 新しいスレッドを作成する必要があることを意味します。
私は常にメインスレッドのサービスでMP3再生を実行しましたが、UIは応答したままでした。私が上の引用で推奨されているように別のスレッドに入れなければならないのであれば、私が始めた場所、つまりメディアの再生がメインスレッドから出て、再生の可能性が増す他のアプリが開かれたときなどに殺されますか?
ありがとうございます!私の編集に対処できますか? – LuxuryMode
私は自分のメディアプレイヤーをサービス内とそれ以外の場所の両方に配置しています。 Androidは、より多くのリソースが必要な場合、どこに位置していてもメディアプレイヤーを殺すだろう。また、フォアグラウンド優先度を持つサービスでは別のスレッドよりも殺される可能性は低くなりません。それが殺されることのない唯一の場所は、現在、前景にある活動にあります。 – AndroidDev