2016-06-07 77 views
4

我想实现我的第一个JobService。据我所知,致电onStartJob实际上是有保证的(是的,如果我在没有到期时间的情况下指定一些离谱的要求,那么会有一些优势)。但是如何onStopJob?它保证被称为?,onStopJob总是被调用?

具体而言,我有一个工作,将在后台执行。但是我有办法知道作业完成的时间(例如sharedPrefs)。我希望依靠什么时候调用onStopJob来发送一个通知给用户该工作已经完成。

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

p.s.有些事情可能会有所帮助(我也在考虑这个问题):如果我的onStartJob返回true,那么系统如何知道我的工作何时停止运行,除非它调用onStopJob

回答

3

根据document,onStopJob在系统决定在完成之前强制停止工作时调用。您无法使用此API来满足您的需求。

我建议在作业完成时发送广播消息作为完成信号。

3

情况:
(1)onStartJob()返回false。 (2)系统在onStartJob()返回false后收到取消请求(例如,调用jobScheduler.cancelAll(); onStartJob()返回后)。 onStartJob()返回true后不久。
(4)onStartJob()返回true并且不再满足要求。 (5)在onStartJob()返回true之后调用jobScheduler.cancelAll()。

在牢记:如果系统判定你有机会打电话给jobFinished()甚至在你 必须停止作业的执行
onStopJob()被调用。

解释:
(1)(2)(3)系统不会叫onStopJob()为你工作,如果你已经告诉系统你的工作已经在onStartJob将返回false()完成或通过电话jobFinished(),因为系统不必。 (4)系统会为你调用onStopJob(),但在需求不满足之后需要很长时间,可能需要1min(小米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()来确定作业已经完成是不正确的。

相关问题