3

我正在编写一个数据记录器应用程序,我需要每 5 分钟准确地发出一个 http 请求。用户知道电池耗尽,这对我来说没问题。我正在使用带有适当通知的前台服务,并且我有一个处理程序线程来女巫我每 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.
       }
     });
   }
}
4

1 回答 1

1

这是正常行为吗

是的,对于 Android 6.0 中的打盹模式,当应用程序静止一个小时左右时触发。M 开发者预览版扩展了打盹模式,即使在设备移动时它也会部分触发,尽管我认为你的场景在这种情况下会继续工作。

用户意识到电池耗尽

用户可以将您添加到电池优化白名单(设置 > 应用程序 >(齿轮图标)> 电池优化)。

于 2016-03-17T15:14:11.620 回答