もちろん、バックグラウンドでの音楽再生を処理する音楽サービスがあります。また、実行する必要がある UI 変更のアクティビティの通知、キューの保存と復元、カーソルを介した曲レコードの取得、およびすべての曲が変更されると、進行中の通知でビットマップが更新されます。
何が問題ですか?ユーザーが何をしようとしても、サービスはほぼ常にクラッシュします。たとえば、曲を再生してからゲームを開くと、サービスがクラッシュします。Chrome で Web を閲覧するなどの軽い操作でもサービスがクラッシュすることがあります。
いくつかの詳細:
1 -サービスは経由で開始されstartService(new Intent(this, MyMusicService.class));
ますが、ユーザーがアクティビティを離れるとstartForeground(mId, mNotification);
、簡単な制御を提供する進行中の通知を表示するために呼び出します。また、startForeground()
ActivityManager によるこれらの強制終了はユーザー エクスペリエンスを混乱させるため、優先する必要があるサービスを対象としているためです。 (サービスが強制終了された場合、音楽は停止します)
2 -クラッシュの再現を試みましたが、Chrome でのブラウジングのような重い作業をしていないとき (ほぼ 50% の確率でクラッシュが再現されます)、およびTemple Run 2 の起動などを行っているときに必ず発生します。参考までに、何もしなくても、バックグラウンドでアイドル状態で音楽を再生するだけで、再生はまったく停止せず、意図したとおりに機能します。
3 -私がテスト デバイスとして使用している電話は、決して低速または低メモリ デバイスではなく、Galaxy Nexus です。
4 -いくつかの long をキャッチしようとしましたが、単に次のように表示されることがあります。
02-24 06:53:32.586: I/ActivityManager(387): Process com.deadpixels.light.player (pid 27720) has died.
他のメッセージが表示されず、同じメッセージに WINDEATH が付随する場合があります。
02-24 06:53:32.586: W/ActivityManager(387): Scheduling restart of crashed service com.deadpixels.light.player/.service.MyMusicService in 5000ms
02-24 06:53:32.602: W/InputDispatcher(387): channel '418d09c8 com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity (server)' ~ Consumer closed input channel or an error occurred. events=0x9
02-24 06:53:32.602: E/InputDispatcher(387): channel '418d09c8 com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity (server)' ~ Channel is unrecoverably broken and will be disposed!
02-24 06:53:32.602: W/InputDispatcher(387): Attempted to unregister already unregistered input channel '418d09c8 com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity (server)'
02-24 06:53:32.602: I/WindowState(387): WIN DEATH: Window{418d09c8 u0 com.deadpixels.light.player/com.deadpixels.light.player.HomeActivity}
また、ほとんどの場合、クラッシュが発生すると、他の多くのサービスが「停止」することに気付きました。完全なログをここに添付します。
5 - ACRAを使用してクラッシュに関する詳細情報を取得しようとしましたが、すべてが正しくセットアップされているように見えますが、クラッシュ後にログが送信されないか、何も起こりません。ACRA がクラッシュを検出して起動することはわかっています。
02-24 06:53:37.719: D/ACRA(28293): ACRA is enabled for com.deadpixels.light.player, intializing...
02-24 06:53:37.742: D/ACRA(28293): Using default Mail Report Fields
02-24 06:53:37.742: D/ACRA(28293): Looking for error files in /data/data/com.deadpixels.light.player/files
02-24 06:53:37.742: W/ACRA(28293): com.deadpixels.light.player reports will be sent by email (if accepted by user).
しかし、設定したmailtoにもGoogleドキュメントのフォームにも何も送信されていません。
他に何を試すべきかわからないので、何を探すべきかについて良いアイデアを得たいと思っていました. 私が言ったように、サービスはいくつかのことを行いますが、私の知る限り、それほどリソースを消費するものではありません。正直なところ、クラッシュしているサービスと関係があるかどうかさえわかりません。
サービスで発生するいくつかのコード ビットの要点と、私がセットアップした ACRA コードを次に示します。また、他の音楽プレーヤーでサービスのクラッシュを再現しようとしたことも注目に値しますが、問題はまったく発生しませんでした.
助けてくれてありがとう!