Я видел вопросы по этому вопросу.Извлек исходный код , но до сих пор не могу понять, почему JobService.onStopJob()
не называется после выполнения работы.
Код, который создает Job
:
private Job jobFrom(Bundle bundle, int windowStart, int windowEnd) {
return dispatcher.newJobBuilder()
.setService(AttackJobService.class)
.setTag(attack.getPushId())
.setRecurring(false)
.setLifetime(Lifetime.UNTIL_NEXT_BOOT)
.setTrigger(Trigger.executionWindow(windowStart, windowEnd))
.setReplaceCurrent(false)
.setExtras(bundle)
.build();
}
Работа запланирована как показано ниже:
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context));
dispatcher.mustSchedule(job);
Мой JobService
все еще довольно прост, потому что яя все еще пытаюсь проверить структуру:
public boolean onStartJob(@NonNull JobParameters job) {
new Thread(() -> {
try {
Thread.sleep(2000);
jobFinished(job,false); //signal that the job is done
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
return true; // Answers to the question: "Is there still work going on?"
}
public boolean onStopJob(@NonNull JobParameters job) {
Log.d(TAG, "onStopJob() called");
return false; // Answers to the question: "Should this job be retried?"
}
Вызывается onStartJob()
, и поток начинает выполняться.Поток спит в течение 2 секунд, а затем вызывается jobFinished()
.
Разве это не означает, что onStopJob()
тоже нужно вызывать?