主要问题

假设我有一个从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...

08-18 09:27