1

私は、SensorEventListenerインターフェースを拡張して、ログファイルにログインする気圧計への変更をリッスンするアプリを作成しています。ロギングを開始する前に、システム時間をミリ秒単位で追加し(これをミリ秒タイムスタンプ1、またはMT1と呼びます)、ロギングが終了した後、別のシステムタイムスタンプをミリ秒単位で追加します(これをミリ秒タイムスタンプ2、またはMT2と呼びます)。

SensorEventには独自のタイムスタンプ(ナノ秒タイムスタンプ(NT)と呼びます)があり、MT1とMT2の間でログに記録します。

問題は次のとおりです。ロギング中に電話がスリープ状態になると、SensorEventレートは、設定したレート(たとえば、SENSOR_DELAY_FASTEST)では発生しなくなったようです。さらに、SensorEventタイムスタンプは、電話が再起動されてからの稼働時間のナノ秒を表すことになっていますが、「欠落している」ナノ秒があります。MT2とMT1の間の時間差は、多くの場合、NTNの間の時間差の2倍以上です(Nはサンプル数)およびNT1。

PowerManager.Wakelock()を使用することでこの問題をある程度解決することができましたが、その結果、私のアプリは巨大なパワーホッグになり、本当に不器用なハックのように見えます。この問題を回避する他の方法はありますか?

4

1 に答える 1

0

デバイスがスリープ状態になった場合、または画面がオフになった場合でも、センサーの動作は保証されません(ただし、CPUの電源がまだオフになっているとは限りません)。動作は文書化されておらず、デバイスによって間違いなく異なるようです。

「巨大なパワーホッグ」であることに落ち着くか、画面がオンになっている場合を除いてセンサーの読み取りを必要としないようにアプリを再設計します。

Androidのセンサーは、長期的なログ記録や監視の目的ではなく、フォアグラウンドアプリで積極的に使用されるように設計されています。

于 2012-07-26T21:12:17.770 に答える