Дозировочный режим приостанавливает обслуживание переднего плана

Я пишу приложение для регистрации данных, и мне нужно делать HTTP-запрос каждые 5 минут. Пользователь знает о разрядке аккумулятора, и это нормально для меня. Я использую службу переднего плана с соответствующим уведомлением для этого, и у меня есть поток обработчика, чтобы я публиковал выполняемые задачи каждые 5 минут. Похоже, что когда телефон входит в режим ожидания, поток приостанавливается и не выполняется. Это нормальное поведение или я что-то упустил? Любая помощь о том, как это сделать, будет оценена.

Сервисный код, который запускает поток:

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.
       }
     });
   }
}

1 ответ

Это нормальное поведение

Да, для режима Doze в Android 6.0, который срабатывает, когда приложение не используется в течение часа или около того. M Developer Preview расширяет режим Doze, так что он также частично срабатывает, даже когда устройство движется, хотя я думаю, что ваш сценарий продолжит работать в этом случае.

Пользователь осведомлен о разряде батареи

Пользователь может добавить вас в белый список оптимизации батареи (Настройки> Приложения> (значок шестеренки) > Оптимизация батареи).

Другие вопросы по тегам