イベント処理システムを改善してより堅牢にし、精度の安定性を向上させようとしています。
時間ベースのイベント処理/応答システムであるため、最初に関連する決定は、どの時間基準を使用するかです。見つけたものをすべて読んだ後、SystemClock.elapsedRealtime() を使用することになりました。SystemClock.uptimeMillis() または System.nanoTime() を使用しないのはなぜですか? 私のシステムは、スリープ中/画面がオフの間も動作し続ける必要があるためです。
ここでより良いアプローチはありますか?
その後、最も問題のあるステップ: 時限イベントを処理し、タイムラグ/遅延/変動なしで希望の時間に発生することを保証する方法は?
できるだけ多くのことを読んだ後、イベントのクラスごとに 1 つのハンドラー アプローチを採用することにしました (異なるクラスが非同期で発生できるようにするため)。
残念ながら、これは期待どおりに動作しません: - タイミングが完全に同期されることもあれば、非常に大きな一定の遅延が発生することもあります。コードをまったく変更せずに、数分後にアプリケーションを起動するだけです。スレッド間のクロック同期の問題はありますか (イベント ジェネレータとイベント ハンドラは別のスレッドにあります)。- ハンドラーのタイミングは一定/正確ではなく、イベント結果が可変ラグと同期せずに表示されていることに簡単に気付くことができます。
Android で時限イベントをより正確に処理する方法についてのヒントはありますか?
ありがとう、ガブリエル・シモンイス