You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JobScheduler执行重复任务时,如何正确调用jobFinished()?

JobScheduler 周期性任务中 jobFinished() 参数的正确选择

嘿,我正好对这个点比较熟悉,给你掰扯清楚:

直接给结论

如果你想让任务严格按照你设置的周期重复执行,必须调用 jobFinished(parameters, false)。

两个参数的本质区别

jobFinished() 的第二个参数 needsReschedule,是在告诉系统「这次任务结束后,要不要重新安排这个任务」:

  • 传 false:系统判定任务正常完成,会完全遵循你之前 setPeriodic(interval) 设定的时间间隔,到点就触发下一次任务,完美契合你的需求。
  • 传 true:系统会把任务标记为「需要重新调度」,但这时候不会遵守你设置的周期,而是会根据系统的调度规则(比如设备是否空闲、是否在充电等)来决定什么时候再次执行,大概率会打乱你想要的固定周期。

结合你的代码分析

看你写的 completeRestore 方法里已经用了 jobFinished(parameters, false),这其实是完全正确的!因为你设置了每10秒执行一次,传false就能让系统老老实实按这个周期跑。

另外再给你提两个小细节:

  • 你的 onStartJob 返回 true 是对的,因为你在子线程执行任务,返回true会告诉系统「任务还在后台跑呢,等我调用jobFinished再算结束」。
  • onStopJob 返回 false,意思是如果系统因为资源紧张把任务停了,就不再重新调度它,这个逻辑如果符合你的业务需求就没问题。

最后把你代码里的关键部分标出来(你当前的写法是正确的):

fun completeRestore(parameters: JobParameters) {
    logError("Starting")
    // 正确:保证任务按设定周期重复执行
    jobFinished(parameters, false)
}

内容的提问来源于stack exchange,提问作者HelloCW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:40:09