【问题标题】:Doze mode suspends foreground service打盹模式暂停前台服务
【发布时间】:2016-03-17 14:58:33
【问题描述】:

我正在编写一个数据记录器应用程序,我需要准确地每 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.
       }
     });
   }
}

【问题讨论】:

    标签: android android-service foreground-service android-doze-and-standby


    【解决方案1】:

    这是正常行为吗

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

    用户意识到电池耗尽

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

    【讨论】:

    • 我已将应用列入白名单。当设备处于打盹模式时,您的音乐流媒体应用程序(前台服务)会继续获取数据吗?我的处理程序根本没有触发。
    • @GiorgosOikonomou:“我已将应用列入白名单”——嗯……“当设备处于打盹模式时,您的音乐流媒体应用(前台服务)继续获取数据?” -- 在没有充电器的情况下,我已经有一个多小时没有在 Android 6.0 上运行流媒体音乐应用程序了。也许 Android 以不同的方式处理具有音频焦点的应用程序。 “我的处理程序根本没有触发”——你确定服务没有停止吗?您也可以考虑使用ScheduledExecutorService 而不是基于Handler 的方法,看看您是否有更好的运气。
    • ScheduledExecutorService Jobs 在应用从多任务选项卡中清除后停止工作(多任务--> 杀死应用)
    • @ShivamGaur:是的。 ScheduledExecutorServiceHandler 和任何其他进程内计时解决方案仅在进程运行时有效。
    • @CommonsWare 前台服务覆盖打盹模式,这意味着它仍然存在并且永远不会被杀死。这里还有其他问题
    猜你喜欢
    • 2016-01-06
    • 2017-08-06
    • 2019-11-13
    • 1970-01-01
    • 2018-10-30
    • 2017-05-03
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多