2016-06-07 19 views
4

Ich versuche meinen ersten JobService zu implementieren. Ich verstehe, dass ein Anruf an onStartJob ist praktisch garantiert (ja, es gibt einige Kanten, wenn ich einige unverschämte Anforderungen ohne eine Ablaufzeit angeben). Aber wie wäre es mit onStopJob? Ist es garantiert angerufen zu werden?auf Android, wird onStopJob immer aufgerufen?

Um genau zu sein Ich habe einen Job, der im Hintergrund ausgeführt wird. Aber ich habe eine Möglichkeit zu wissen, wann der Job fertig ist (z. B. sharedPrefs). Ich hatte gehofft darauf zu vertrauen, wenn onStopJob aufgerufen wird, um eine Benachrichtigung an den Benutzer zu senden, dass der Job erledigt ist.

Hinweis: onStopJob ist ein praktischer Ort für das Senden der Benachrichtigung, da ich bereits überprüfe, ob der Job fertig ist, um zu wissen, ob ich es erneut versuchen sollte.

p.s. Etwas, das in Betracht gezogen werden könnte (ich denke darüber nach): Wenn mein onStartJob wahr zurückgibt, wie weiß das System, wenn mein Job beendet wird, bis er onStopJob aufruft?

Antwort

3

Gemäß der document wird onStopJob aufgerufen, wenn das System entscheidet, den Job vorzeitig zu beenden, bevor es beendet wird. Sie können diese API nicht verwenden, um Ihre Anforderungen zu erfüllen.

Ich empfehle, eine Broadcast-Nachricht als Abschluss-Signal zu senden, wenn Ihr Job beendet ist.

3

Situation:
(1) onStartJob() return false.
(2) System hat eine Abbruchanforderung empfangen, nachdem onStartJob() false zurückgegeben hat (z. B. jobScheduler.cancelAll(); nach onStartJob() return).
(3) job jobFinished (params, false); bald nach onStartJob() zurück wahr.
(4) onStartJob() gibt true zurück und die Anforderungen werden nicht mehr erfüllt. (5) Rufen Sie jobScheduler.cancelAll() nach onStartJob() auf, geben Sie true zurück;

Keeping in den Sinn:
onStopJob() aufgerufen wird, wenn das System festgestellt hat, dass Sie Ausführung Ihrer Arbeit beenden müssen, noch bevor Sie eine Chance gehabt haben jobFinished() aufzurufen.

Erklären:
(1) (2) (3) Das System wird nicht onStopJob() für Sie Job aufrufen, wenn Sie System sagen, dass Sie Arbeit durch return false in onStartJob getan haben() oder durch Anruf jobFinished(), weil das System nicht muss.

(4) Das System ruft onStopJob() für Sie auf, aber es dauert eine lange Zeit, nachdem die Anforderungen nicht erfüllt werden, vielleicht 1min (Test auf Xiaomi 4c).

(5) Das System ruft onStopJob() für Sie auf.

Ihre Frage:
(1)how does the system know when my job stops running unless it calls onStopJob? Sie können jobFinished() aufrufen oder false zurück in onStartJob() System zu informieren, dass Sie Ihren Job beenden haben.

(2)Is it guaranteed to be called? Es hängt von Situationen ab. Es ist also nicht richtig, sich auf onStopJob() zu verlassen, um festzustellen, dass der Job erledigt wurde.