JobService中的jobFinished和onStopJob之间的交互

时间:2018-01-04 13:59:05

标签: android multithreading

主要问题

假设我有一个派生自JobService的服务,我在onStartJob返回true表示我正在运行一个长期运行的外部线程。

进一步说系统决定拨打onStopJob

现在,在我正确停止线程后,是否应该调用jobFinished

其中一个选项必须是真的,但是哪个?

    无论jobFinished是否被调用,如果onStartJob返回true,则必须始终调用
  1. onStopJob
  2. 如果调用jobFinished,则不能调用
  3. onStopJob(可能存在空指针异常的风险?)
  4. 如果jobFinished被调用,则调用onStopJob无关紧要
  5. 加分问题

    如果onStopJob被调用并且返回true以重新安排作业,那么一旦线程停止jobFinished被调用needRescedule = false(反之亦然),会发生什么?

1 个答案:

答案 0 :(得分:1)

最近我在这个JobService上工作,是的,它的API非常混乱,文档很少。以下是对您的疑问的回答

  • 如果onStartJob返回true,则必须始终调用jobFinished 如果onStopJob被调用或者不被调用 - 答案是否
  • 不得调用jobFinished 如果调用onStopJob(可能存在空指针的风险) 例外情况?) - 答案是否
  • 调用jobFinished无关紧要 是否调用onStopJob - 下面的答案

Android会继续使用您选择的RetryStrategy重试您的工作,直到

  • onStartJob或onStopJob作业已返回 false
  • 或你 将needsFinished与needsReschedule称为 false

my medium blog here regarding same...