以打瞌睡模式启动前台服务

Starting foreground service in doze mode

我正在开发一个通过 wifi 连接到特殊设备的应用程序。我需要在短时间内进行状态更新,resp。使应用程序中我的特殊设备的状态保持最新。 FCM 不是一个选项。我的想法是为用户提供两种选择:使用前台服务进行快速更新或使用定期更新机制以节省电池电量的 "slow" 更新。

我的问题是关于第二个选项。间隔应该在五分钟左右。因此,使用 JobScheduler 是不可能的。但即使使用 AlarmManager 似乎也不是一个选项,因为在打瞌睡 windows 期间我无法访问网络。

我考虑过使用 WakefulBroadcastReceiver 接收 AlarmManagerIntent,需要一个 WakeLock 并转动我的长 运行 Service 通过调用 startForeground() 进入前台。但似乎 startForeground() 方法对 Service 没有影响,只要设备处于休眠模式即可。

我阅读了很多关于 doze 和服务的页面,但不知道如何解决我的问题...有人知道吗?

你应该使用 GcmTaskService。您可以为您的操作安排一些时间间隔,即使在打瞌睡模式下也能正常工作,请通过 link

查看更多信息

您可以使用 setAlarmClock,但不推荐用于您的目的。 相反,您可以使用 setExactAndAllowWhileIdle 并以 15 分钟的间隔手动重新编程。 最佳方式:GCM。