JobService中jobFinished与onStopJob交互及调度疑问
嘿,这个问题问到点子上了,我来给你理清楚JobService的这些细节:
主问题解答
正确选项是 1.只要onStartJob返回true,无论是否调用onStopJob都必须调用jobFinished
原因很明确:当你在onStartJob里返回true,本质是跟系统约定“我用自己的外部线程处理任务,完成后会主动通知你”。系统会一直保留这个Job的相关资源,直到你调用jobFinished确认任务结束——不管任务是正常执行完毕,还是被系统触发onStopJob要求中断。哪怕你已经在onStopJob里妥善停掉了工作线程,也必须调用jobFinished,否则系统会误以为这个Job还在运行,可能引发资源泄漏,甚至干扰后续Job的调度逻辑。
附加问题解答
这里的核心规则是:jobFinished的needsReschedule参数优先级高于onStopJob的返回值
分两种情况拆解:
- 如果
onStopJob返回true(表示你希望重新调度任务),但线程停止后调用jobFinished(..., needsReschedule=false):系统会以jobFinished的设置为准,不会重新调度该任务。因为onStopJob的返回值只是你在被要求停止时的初步意愿,而jobFinished是你对任务最终状态的明确通知,系统会优先遵循这个“最终指令”。 - 反过来,如果
onStopJob返回false(不要求重新调度),但线程停止后调用jobFinished(..., needsReschedule=true):系统会忽略onStopJob的返回值,按照jobFinished的要求重新调度任务。
简单说,onStopJob的返回值是给系统的“参考建议”,而jobFinished的参数才是具有决定性的“最终命令”。
内容的提问来源于stack exchange,提问作者DaedalusAlpha
相关产品推荐
相关产品推荐

