【问题标题】:Does device enter doze mode while foreground service running前台服务运行时设备是否进入打盹模式
【发布时间】:2017-06-30 21:02:08
【问题描述】:

我的应用需要长时间在后台运行并定期向服务器发送数据。我试过 AlarmManager 但它在打盹模式下受到限制。我接下来想到的是前台服务。

在前台服务运行时设备是否进入打盹模式?

如果设备进入打盹模式,在前台服务运行时互联网连接是否受到限制?

【问题讨论】:

    标签: android foreground-service doze


    【解决方案1】:

    这对我来说效果很好,用一些模拟器和 Android 6.0 和 7.1 真实设备测试了几个小时的连续运行,网络连接从未丢失:

    在主 Activity onPause 中,我获得了一个 Partial WakeLock,并以 STARTFOREGROUND_ACTION 意图启动了一个服务,该服务调用 startForeground 并显示一个通知。

    在 Activity onResume 释放 WakeLock 时,Service 以 STOPFOREGROUND_ACTION 意图停止,Service 本身调用 stopForeground 和 stopSelf。

    这也避免了 Activity 在 Back Key press 时被破坏:

     @Override
        public void onBackPressed() {
             moveTaskToBack(true);
        }
    

    当然我提供了一个菜单选项来停止后台处理并完成 Activity

    我的定期询问互联网服务器的代码放置在 Activity 中,它使用计时器。

    希望对你有帮助

    【讨论】:

    • 我在这里没有得到你的解决方案。 Android 打盹模式会忽略所有唤醒锁。
    • 不适用于有活动前台服务 + 通知的我。我已经在几个真实设备上进行了测试。
    • 即使使用前台服务,AlarmManager 的 setExact 和 setExactAndAllowWhileIdle 在打盹模式下也不起作用。设备唤醒后,AlarmManager 会触发。 setAlarm 在打盹模式下工作,但它在状态栏上显示一个警报图标。任何其他方式来安排服务中的定期任务?
    • 似乎为了避免进入打盹模式,前台服务必须显示通知...
    猜你喜欢
    • 2019-11-13
    • 2016-01-06
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多