主要问题
假设我有一个从JobService
派生的服务,其中在onStartJob
中返回true表示我正在长时间运行外部线程来工作。
进一步说,系统决定调用onStopJob
。
现在,在我正确停止线程之后,是否应该调用jobFinished
?
这些选项之一必须为真,但是哪个呢?
如果jobFinished
返回true,则必须始终调用onStartJob
,无论是否调用onStopJob
如果调用了jobFinished
,则不能调用onStopJob
(也许存在空指针异常之类的危险?)
调用jobFinished
或是否调用onStopJob
都没有关系
奖金问题
如果onStopJob
被调用并返回true以重新计划作业,然后线程停止运行jobFinished
并使用NeedsRescedule = false(反之亦然),则该怎么办?
最佳答案
最近,我从事该JobService的工作,是的,它的API相当混乱,文档却很少。以下是您的查询的答案
如果onStartJob返回true,则必须始终调用jobFinished
是否调用onStopJob无关紧要-答案为否
jobFinished不得调用
如果onStopJob被调用(可能存在空指针的风险
例外之类的东西?)-答案是否定的
调用jobFinished都没关系
是否调用了onStopJob-回答如下
Android将继续使用您选择的RetryStrategy重试您的工作,直到
onStartJob或onStopJob作业已返回false
或者您
已调用jobFinished with needsReschedule为false
my medium blog here regarding same...