Androidでスリープ状態で歩数計センサー（TYPE_STEP_DETECTOR）の使用について


Androidでサービスを作成して、その中で歩数計センサー（TYPE_STEP_DETECTOR）を使用して歩数をカウントしています。  
アプリを起動しているときは問題なくカウントされるのですが、スリープ状態（画面が真っ暗の状態）のときにカウントが極端に少ない場合がありました。  
スリープ状態だと必ずカウントが少ないというわけではないのですが、再現パターンがいまいちわかりません。

カウントがされない原因がわからないのですが、スリープ状態だと歩数計センサーが作動しなくなるとかあるのでしょうか？

アドバイスをよろしくお願い致します。

[code]

    public final class PedometerService extends Service implements SensorEventListener {
    
      private SensorManager mSensorManager;
      private Sensor mSensor;
      private HandlerThread mSensorThread;
    
      @Override
      public void onCreate() {
        mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE);
        mSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
        mSensorThread = new HandlerThread("PedometerServiceThread");
        mSensorThread.start();
        mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_FASTEST,
                                        new Handler(mSensorThread.getLooper()));
      }
    
      @Override
      public void onDestroy() {
        mSensorThread.getLooper().quit();
        mSensorManager.unregisterListener(this);
      }
    
      @Override
      public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
      }
    
      @Override
      public IBinder onBind(Intent intent) {
        return null;
      }
    
      @Override
      public void onSensorChanged(SensorEvent event) {
        int value = (int)event.values[0];
    
        //歩行を検知したときの処理
    
      }
    
      @Override
      public void onAccuracyChanged(Sensor sensor, int accuracy) {}
    
    }
    
[/code]




アプリが[Dozeモード](https://developer.android.com/training/monitoring-device-
state/doze-standby.html?hl=ja)に入ることによって、カウントがされなくなっていると思われます。  
Dozeモードは簡単に説明すると、電池の消費を抑えるために端末を使用していない場合は、ほぼ全ての処理を止めて節電モードに入る機能です。

DozeモードはAndroid 6.0から導入されました。  
Android 6.0の時は端末を持って歩いている（端末が静止状態じゃない）場合はDozeモードに入らなかったのですが、Android
7.0からは静止状態でなくてもDozeモードに入るようになりました。

Dozeモード中もアプリを動作し続ける方法は[公式のドキュメント](https://developer.android.com/training/monitoring-
device-state/doze-standby.html?hl=ja)にも記載されているので確認してください。  
Qittaに投稿されている [Android
M/NのDozeによる制限とバックグラウンドタスク実行に関するまとめ](http://qiita.com/FumihikoSHIROYAMA/items/b1d6dbda120462d0e209)
が非常によくまとまっているので、参考にしてみてください。

対策としては、[ホワイトリストへの登録](https://developer.android.com/training/monitoring-device-
state/doze-standby.html?hl=ja#whitelisting-cases)が良いかと思います。

