2017-02-18 85 views
-1

基本上我被卡住了,因为电池中的“改进”在Android 6.0+中添加了。我的应用程序从第三方服务器的Web服务获取数据:我的应用程序从11+在Android中每x分钟运行IntentService的正确方式包括打盹

方案

这里是我的方案支持API。由于它不是我的服务器,因此我无法控制何时添加或删除数据。数据的可用性各不相同。我希望能够触发一个IntentService来获取数据,例如在接下来的6个小时内每30/60分钟一次。通过这种方式,我可以在我的应用程序中的数据覆盖数据从服务器不可用时的情况。 当然,即使我的应用程序已关闭,也需要执行此操作。

你可能会说这对电池不友好,但它是高级用户的选择。

我做了什么至今

我一直在努力了很多与设置​​。虽然设置重复闹钟似乎是最简单和最方便的方式,但它只有在android 5.0之前才能可靠地工作。

从引入Doze开始,根据文档,报警被推迟到maintenance window,并且由于这些窗口在1-2-4等小时,它不适合我的需要。

我放弃了使用集repeating,并试图使用一次Alarm它在IntentService执行中重新安排。从测试setExact似乎没有运行良好,但后来尝试setExactAndAllowWhileIdle这确实在正确的时刻开火,但如果在Doze模式下,它没有网络连接访问,使其无用。

即使是这样,我不知道当setRepeatingsetExact报警被延迟,但之前在下一个维护窗口中的设备被唤醒会发生什么......

基本上现在我卡住,用未机制工作,我不知道还有什么可以选择的应用程序支持的Android版本和需求。 LE:实际上,我并不知道在Android上设置背景作业的好方法,即使不包括Doze。我的意思是,我们确实有JobScheduler这似乎是一件很好的事情......但是,嘿,它只在Android 21上可用,而不是向后支持......我的意思是,真的,有一个简单的事情要做,我已经等待迄今为止的几天。

回答

1

如果设备处于空闲模式(由于打盹系统),这意味着用户没有使用它,因此在下一个维护时段中我看不到任何关于推迟作业(更新)的问题。

用于唤醒手机,允许用户访问互联网的唯一方法是使用

setAlarmClock() 

如果使用setAlarmClock(),那么设备将退出空闲模式下的报警时间前几分钟:这个要看配置Doze,使用shell命令为了测试目的而实际更改。在特殊情况下,您应该使用setAlarmClock(),例如提醒重要的日历活动。

此外,当您设置它时,状态栏中应该显示一个图标(铃):它与系统报警使用的机制相同。

顺便说一下,我会劝阻这种方法,并等待下一个维护窗口。实际上,你应该避免使用轮询机制。

+0

谢谢,'setAlarmClock'似乎是唯一真正的选择,但它确实是一个超出范围。 – Alin