其他分享
首页 > 其他分享> > 在Android上,onStopJob总是被称为?

在Android上,onStopJob总是被称为?

作者:互联网

我正在尝试实现我的第一个JobService.我理解对onStartJob的调用实际上是有保证的(是的,如果我在没有到期时间的情况下指定一些令人发指的要求,则会有一些优势).但是onStopJob怎么样?是否保证被称为?

具体来说,我有一份工作将在后台执行.但我有办法知道工作何时完成(例如sharedPrefs).我希望在调用onStopJob时依赖于向用户发送作业已完成的通知.

注意:onStopJob是发送通知的便利位置,因为我已经在检查作业是否完成,以便知道我是否应该重试.

附:需要考虑的事情可能有所帮助(我也在考虑):如果我的onStartJob返回true,系统如何知道我的作业何时停止运行,除非它调用onStopJob?

解决方法:

情况:

(1)onStartJob() return false.
(2)System received a cancel request
after onStartJob() return false.(For example,invoke
jobScheduler.cancelAll(); after onStartJob() return.)
(3)Invoke
jobFinished(params,false); soon after onStartJob() return true.
(4)onStartJob() return true and requirements are no longer met.

(5)Call jobScheduler.cancelAll() after onStartJob() return true;

牢记:
如果系统确定您,则调用onStopJob()
 必须在你有机会打电话给jobFinished()之前停止执行你的工作.

说明:

(1)(2)(3)如果您通过onStartJob()或通过调用jobFinished()告诉系统您已完成工作,系统将不会为您的工作调用onStopJob(),因为系统不需要.

(4)系统将为您调用onStopJob(),但是在满足要求后需要很长时间,可能是1分钟(在小米4c上测试).

(5)系统将为您调用onStopJob().

你的问题:
(1)除非调用onStopJob,否则系统如何知道我的作业何时停止运行?

您可以调用jobFinished()或在onStartJob()中返回false以让系统知道您已完成工作.

(2)保证被称为?

这取决于情况.因此依靠onStopJob()来确定作业已经完成是不对的.

标签:android,android-jobscheduler,job-scheduling
来源: https://codeday.me/bug/20190611/1219549.html