在Android上每天运行计划任务一次
我的Android应用程序通过在特定时间发送通知来帮助用户遵循其日常计划。使用JobScheduler可以轻松解决此任务。它看起来简单,轻便,并且是最新的解决方案。在Android上每天运行计划任务一次
我在苦苦挣扎的是如何计划每天的所有通知。我需要运行代码来检查用户的每日计划并安排每天午夜时间安排通知。到目前为止,我发现了两种方法
使用JobService。可以重新安排与
公众最终无效jobFinished(JobParameters参数,可以布尔needsReschedule)
但我认为这是一个不好的解决方案,因为
我需要将完成的工作视为失败,虽然成功
计划时间将线性增加/ exponenti盟友,这是不能接受的。
另一种方法是使用AlarmManager,但它也有一些缺点
- 的根据文件
已注册的警报被保留,而设备是睡着了(如果在此期间关闭设备,可以选择性地唤醒设备),但是如果关闭并重新启动,设备将被清除。
这是不可接受的,因为我的用户可能会错过重要的事情。
- 我读过它很快就杀死了电池。真的吗?
我在文档中找到的其他解决方案看起来并不像我所需要的。 (https://developer.android.com/topic/performance/scheduling.html)
任何想法如何在日常的基础上运行计划任务,这将轻而易举重启?
使用JobService很好。你不需要重新安排你的工作。只需根据需要创建新工作。
我也有自己的调度警报问题。更糟的是,从Android 6开始,打盹模式会延迟警报执行。
请看看:https://developer.android.com/training/monitoring-device-state/doze-standby.html
对于报警,你可以有一个启动完成监听器,并重新安排重新启动报警。如果您在报警触发期间不需要网络连接,请参阅从上面的链接中将您的应用修改为打盹。
看起来像AlarmManger可以通过setAndAllowWhileIdle()方法满足我的要求。我现在唯一担心的是电池消耗。从文档 “这些警报可以显着影响闲置时设备的电源使用情况(从而导致应用程序对电池造成严重的电池责任安排),因此应该小心使用它们。”因此,我很可能需要执行一些操作实验/研究来了解AlarmManger在电池使用寿命方面的成本。我是Android新手,所以错过了打盹模式部分。感谢您指出了这一点! – StackNRG
从我迄今的经验来看,'setExactAndAllowWhileIdle'似乎在需要的时候触发,唯一的缺点是在报警触发期间你没有网络连接。所以使用它为本地事情应该工作。根据我的理解,在打盹模式下,警报和工作正在推迟到下一个维护时段,所以有计划工作似乎没有帮助你的情况。让事情变得更糟JobScheduler可以从android 21+获得,而对于旧版本,可以使用Firebase JobDispacther,但目前它似乎只使用GooglePlayDriver,即使在androdid 5中也是如此。 – Alin
好主意。但基于下面的评论,我还需要考虑打盹模式,因为它可以推迟JobScheduler的执行。所以据我的理解,我可以在JobScheduler和AlarmManger中实现此功能,唯一的折衷是电池消耗和计划时间精度之间的关系。那么,至少有几个选择是很好的。谢谢! – StackNRG