基本上我被卡住了,因为 Android 6.0+ 中添加了电池的“改进”。我的应用支持 11+ 的 API
设想
这是我的场景:我的应用程序从 3rd 方服务器的 Web 服务中获取数据。由于它不是我的服务器,我无法控制何时添加或删除数据。数据的可用性各不相同。我希望能够触发 IntentService 来获取数据,例如在接下来的 6 小时内每 30/60 分钟一次。通过这种方式,我可以让我的应用程序中的数据涵盖数据从服务器不可用的情况。当然,即使我的应用程序已关闭,这也需要进行。
您可能会说这对电池不友好,但它是高级用户手头的一个选择。
到目前为止我做了什么
我在设置方面遇到了很多困难Alarms
。虽然设置重复闹钟似乎是让它工作的最简单和最方便的方法,但事实证明它只在 android 5.0 之前可靠地工作。
从引入 开始Doze
,根据文档,警报被推迟到maintenance window
并且由于这些窗口在 1-2-4 等小时出现,因此不适合我的需要。
我放弃了使用 setrepeating
并尝试使用在执行中Alarm
重新安排的 one time。IntentService
从测试setExact
来看似乎运行不佳,但随后尝试setExactAndAllowWhileIdle
了确实在正确的时刻触发但如果处于Doze
模式下,它没有网络连接访问,使其无用。
即便如此,我不确定当警报延迟setRepeating
或setExact
延迟但设备在下一个维护窗口之前唤醒时会发生什么......
基本上现在我被卡住了,机制不起作用,鉴于应用程序支持的 android 版本和要求,我不知道还能选择什么。
LE:实际上我不知道在 android 上设置后台作业的好方法,甚至不包括 Doze。我的意思是,我们确实有JobScheduler
这似乎是一件好事……但是,嘿,它仅在 Android 21 上可用,并且不向后支持……我的意思是,真的,有一件简单的事情要做,我已经在等待到目前为止几天。