3

私はデータロガーアプリを書いています.5分ごとに正確にhttpリクエストを行う必要があります. ユーザーはバッテリーの消耗を認識しており、私にとっては問題ありません。そのための適切な通知を備えたフォアグラウンド サービスを使用しており、実行可能なタスクを 5 分ごとにポストするハンドラー スレッドがあります。電話が DOZE MODE に入ると、スレッドが中断され、ランナブルが実行されないようです。それは正常な動作ですか、それとも何か不足していますか? それを行う方法についての助けをいただければ幸いです。

スレッドを開始するサービス コード:

private void startTheForegroundService() {   
      NotificationCompat.Builder builder = new NotificationCompat.Builder(MainService.this);
      builder.setPriority(Notification.PRIORITY_HIGH);
      startForeground(1000, builder.build());

      httpThread = new HttpThread("Ping Thread", Thread.NORM_PRIORITY);
      httpThread.start();
      httpThread.loop();
}

スレッド コード:

public class HttpThread extends HandlerThread {
   public Handler mHandler;

   public HttpThread(String name, int priority) {
      super(name, priority);
   }

   public synchronized void waitUntilReady() {
      mHandler = new Handler(getLooper(), new Handler.Callback() {
         @Override
         public boolean handleMessage(Message msg) {
            return false;
         }
      });
   }

   public void loop() {
      waitUntilReady();
      mHandler.post(new Runnable(){
      @Override
      public void run() {
         //code for the http request.
       }
     });
   }
}
4

1 に答える 1

1

それが正常な動作か

はい、Android 6.0 の Doze モードについては、アプリが約 1 時間静止しているときにトリガーされます。M Developer Preview は Doze モードを拡張しているため、デバイスが動いているときでも部分的にトリガーされますが、その場合でもシナリオは引き続き機能すると思います。

ユーザーはバッテリーの消耗を認識しています

ユーザーは、バッテリー最適化のホワイトリストにあなたを追加できます ([設定] > [アプリ] > (歯車アイコン) > [バッテリー最適化])。

于 2016-03-17T15:14:11.620 に答える