2

アプリのバックグラウンド オーディオ再生に取り組んでいます。しかし、一部のユーザーは、1 つの奇妙なバグについて私に警告しました。バックグラウンドで 1 時間以上再生すると、アプリは iOS によって強制終了され、再度起動する必要があります。

ほとんどの場合、アプリがバックグラウンド タスクを非常に頻繁に作成し、再生を再開するのに十分なデータがダウンロードされるまでそれを使用する必要がある場合、インターネット接続が悪い場合に発生します。

バックグラウンド タスクの時間制限については知っていますが、それは問題ではありません。ユーザーのデバイスからのクラッシュ ログの一部を次に示します。

ここに画像の説明を入力 最も重要な行:

Exception Type: EXC_RESOURCE
Exception Subtype: CPU_FATAL
Exception Message: (Limit 80%) Observed 0% over 60 sec
Triggered by Thread: 0

最も奇妙なのは3行目です。0% が 80% の制限を下回っている場合、なぜ例外なのですか?

Thread 0 (メイン スレッド) のスタック トレースをシンボリック化することで、 method で発生していることがわかりました- [NSFileManager fileExistsAtPath:]。以前は method で発生していました+ [UIImage imageWithContentsOfFile:]。では、何が iOS のバックグラウンドでファイル システムへのアクセスをフリーズさせるのでしょうか?

また:

  • アプリがロック画面に画像を設定しようとしたときに発生します。
  • 画像は Cache フォルダーに保存されます。
4

1 に答える 1

0

Apple ドキュメントから:

システム オーディオ フレームワークのいずれかを使用してバックグラウンド オーディオ コンテンツを操作できます。これらのフレームワークを使用するプロセスは変更されていません。(AirPlay 経由のビデオ再生では、Media Player または AV Foundation フレームワークを使用してビデオを表示できます。) メディア ファイルの再生中にアプリが中断されないため、アプリがバックグラウンドにある間、コールバックは正常に動作します。ただし、コールバックでは、再生用のデータを提供するために必要な作業のみを行う必要があります。たとえば、ストリーミング オーディオ アプリは、サーバーから音楽ストリーム データをダウンロードし、再生のために現在のオーディオ サンプルをプッシュする必要があります。アプリは、再生に関係のない余分なタスクを実行するべきではありません。

したがって、画像のダウンロードや保存などを行うと、この規則に違反します。

于 2015-11-26T07:18:09.500 に答える