私は、SensorEventListenerインターフェースを拡張して、ログファイルにログインする気圧計への変更をリッスンするアプリを作成しています。ロギングを開始する前に、システム時間をミリ秒単位で追加し(これをミリ秒タイムスタンプ1、またはMT1と呼びます)、ロギングが終了した後、別のシステムタイムスタンプをミリ秒単位で追加します(これをミリ秒タイムスタンプ2、またはMT2と呼びます)。
SensorEventには独自のタイムスタンプ(ナノ秒タイムスタンプ(NT)と呼びます)があり、MT1とMT2の間でログに記録します。
問題は次のとおりです。ロギング中に電話がスリープ状態になると、SensorEventレートは、設定したレート(たとえば、SENSOR_DELAY_FASTEST)では発生しなくなったようです。さらに、SensorEventタイムスタンプは、電話が再起動されてからの稼働時間のナノ秒を表すことになっていますが、「欠落している」ナノ秒があります。MT2とMT1の間の時間差は、多くの場合、NTNの間の時間差の2倍以上です(Nはサンプル数)およびNT1。
PowerManager.Wakelock()を使用することでこの問題をある程度解決することができましたが、その結果、私のアプリは巨大なパワーホッグになり、本当に不器用なハックのように見えます。この問題を回避する他の方法はありますか?