我正在努力实现我的第一个工作服务。我知道对onStartJob
的调用实际上是有保证的(是的,如果我在没有到期时间的情况下指定了一些不合理的需求,则会有一些边)。但是onStopJob
怎么样?它一定会被叫来吗?
具体来说,我有一个工作将在后台执行。但我有办法知道工作何时完成(例如sharedprefs)。我希望在调用onstopjob时向用户发送任务完成的通知。
注意:onstopjob是发送通知的方便位置,因为我已经在检查作业是否已完成,以便知道是否应重试。
注意:如果我的onStartJob
返回true,系统如何知道我的作业何时停止运行,除非它调用onStopJob
?
最佳答案
情况:
(1)onStartJob()返回false。(2)系统收到取消请求
在onStartJob()之后返回false。(例如,invoke
jobscheduler.cancelAll();在onStartJob()返回之后。)(3)调用
jobFinished(params,false);在onStartJob()返回true之后不久。
(4)onStartJob()返回true,不再满足要求。
(5)在onStartJob()返回true后调用jobscheduler.cancelAll();
记住:
如果系统已确定
必须在调用jobFinished()之前停止执行作业。
说明:
(1)(2)(3)如果您已通过在onStartJob()中返回false或通过调用jobFinished()告诉系统您的作业已完成,系统将不会为您的作业调用onStopJob(),因为系统不必这样做。
(4)系统会为您调用onStopJob(),但需要很长时间才能满足要求,可能需要1分钟(小米4C测试)。
(5)系统将为您调用onStopJob()。
你的问题:(1)how does the system know when my job stops running unless it calls onStopJob?
您可以调用jobFinished()或在onStartJob()中返回false,让系统知道您已经完成了您的工作。(2)Is it guaranteed to be called?
这取决于情况,因此依赖onStopJob()来确定作业已完成是不对的。