私のチームには、リアルタイムオーディオストリームを処理するアプリがあります。私たちがやっていることは、サーバからオーディオを取得し、それをMediaCodecによってPCMにデコードしてから、別のスレッドでAudioTrackに送ることです。 Android 4.xでは、APPをバックグラウンドで実行しても問題ありません。しかし、5.xでは、バックグラウンドでは動作しません。Android 5.1はバックグラウンドで動作していますAPPは遅く、タイマーは不正確です
logcatでは、Appがバックグラウンドで実行されているときに2つの問題が見つかりました。 まず、タイマーが遅くなります。私たちは定期的にPCMをAudioTrackに送信するためにタイマーを使用し、私たちは効率的にAndroidで提案されているようにHandler.sendMsgDelay()を使用します。しかし、バックグラウンドで実行すると、Handlerはフォアグラウンドよりもずっと後でmsgを取得します(20msが必要ですが、50〜60msになります)。 java.util.Timerを試しましたが、バックグラウンドで同じ結果が得られました。私たちは、スレッドを最大優先度に設定しようとします。しかし、効果もありません。
第2に、MediaCodecでもバックグラウンドが遅いです。フォアグラウンドでは7〜8msごとにデコードされたデータをMediaCodecから取得し、バックグラウンドでは30〜50msの間にデコードされたデータを得ることができました。
Google PlayからオンラインラジオのようなAPPをダウンロードし、Android 5.1で実行しています。バックグラウンドで実行しているときは、このような問題はありません。だから、それを避けるためにはある程度の余裕がなければならない。残念なことに、私たちはどうやって...
私は、Android 5.1にバックグラウンドを実行しているアプリケーションのスレッドをより少ないCPU占有にするためにいくつかの省電力ポリシーが必要であることを知っています。しかし、Googleは彼が1つを閉じたときに別のウィンドウを開く必要があります。 APPがフォアグラウンドのようにバックグラウンドで実行できるようにする新しいAPIはありますか?または他の方法ですか?
ありがとうございます。私は最初にそれを試し、ここで結果を共有します。 – Chandler