3

録音されたサンプルを使用して音楽を再生する Android アプリを作成しています (SoundPool を使用)。現在の時間 (realTimeElapsed) に応じて再生する必要があるサンプルをチェックする Player があります。プレーヤーは、1 ミリ秒に設定したタイマーで更新されます。ほとんどの場合、これで問題なく動作しますが、約 100 ミリ秒の遅延が発生することがあります。

タイマーの優先度を上げる方法が見つかりませんでした。これらの遅延を解消する別の方法はありますか?

同時に openGL を使用してシーンをレンダリングしていますが、すべての描画を無効にすると同じ遅延が発生します。

ありがとう

編集:

私は TraceView でそれを分析しました: オーディオ スレッド (Thread-16) はミリ秒ごとに実行されます。しかし、t=2580 で約 200ms のブレークがあります。この期間中、スレッドはスリープ状態ではなく、メソッド SoundPool.play で中断されます。このような遅延があるたびに、オーディオ スレッドが中断されます。これらの中断を防ぐ方法はありませんか?

GL スレッド (オーディオ スレッドに割り込む) の優先度を THREAD_PRIORITY_LOWEST に設定しました。 トレースビュー

画像を右クリックし、「画像を表示」またはそれに近いものを選択して、画像をフル解像度で表示します。

4

1 に答える 1

0

Timer の代わりにHandler.postDelayed()を試して、より良い結果が得られるかどうかを確認することをお勧めします。

そうでない場合は、短いThread.Sleep()を持つスレッドとSystem.nanoTime()のチェックだけですか?

于 2012-04-14T04:57:09.460 に答える