【问题标题】:Android JobScheduler: using setMinimumLatency with setPeriodicAndroid JobScheduler:使用 setMinimumLatency 和 setPeriodic
【发布时间】:2016-09-03 19:04:42
【问题描述】:

我只是在玩JobScheduler,还有一些小问题。

其中之一是,虽然您可以使用 setMinimumLatency() 延迟作业,但您不能将其与 setPeriodic() 结合使用,因为会引发异常。

我真的不明白为什么会这样......延迟开始定期工作似乎是合理的,就像延迟开始一次性工作是合理的一样。

鉴于您不能,使用JobScheduler 安排未来开始的定期作业(即使在重新启动后)的最佳方式是什么?

【问题讨论】:

  • “为什么不合理...”——“为什么开发者 X 做 Y 事”问题对于 Stack Overflow 来说并不是很好,因为只有开发者 X 可以权威地回答这个问题。 “什么是最好的方法......” - 即兴发挥,要么立即安排工作,让您的工作服务跳过尚未完成的工作,要么使用AlarmManager 在您想要的时间获得控制权要开始的工作。
  • 好吧,我已经用AlarmManager 一切正常,但我认为JobScheduler 是推荐的前进方式。我正在考虑使用JobScheduler 的主要原因是因为在Android N 中不再可能在我的AppWidgetProvider 中侦听CONNECTIVITY_CHANGE。所以我将从AlarmManager 解决方案与连接侦听螺栓固定到JobScheduler(连接监听)解决方案,带有... AlarmManager 螺栓固定。嘿嘿。
  • P.S. “为什么不合理”的问题是修辞性的……我已将其改写为陈述。
  • “我认为 JobScheduler 是推荐的前进方式”——嗯,对于某类工作来说确实如此。它不会解决所有可能的工作类别。例如,您不会将它用于闹钟或日历提醒。您计划的用例恰好与任何单个 API 不一致。
  • 是的,我正在使用AlarmManager 来安排定期小部件刷新(比普通的AppWidgetProvider 方法所允许的灵活性更大,包括在丢失刷新时恢复连接后刷新)。这一切都很好......但现在他们已经拿走了CONNECTIVITY_CHANGE :-(也许我需要保持我的AlarmManager框架完好无损,只需在每次刷新警报时安排一个JobService(以获取连接监听)而不是而不是像现在一样直接开始Service

标签: android android-jobscheduler


【解决方案1】:

在您的JobService 类的实现中,在离开onStartJob 方法之前调用jobFinished(params, reschedule); 重新安排。

另外不要忘记在onStopJob 方法中return true 也可以重新安排。

https://developer.android.com/reference/android/app/job/JobService.html#jobFinished(android.app.job.JobParameters,布尔值)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-22
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多