JobService
这里写目录标题
- JobService
-
- 一、API详解
-
- [1 onStartJob](#1 onStartJob)
- [2 onStopJob](#2 onStopJob)
- [二、onStartJob | onStopJob 返回值](#二、onStartJob | onStopJob 返回值)
-
- [case 1](#case 1)
- [case 2](#case 2)
- [case 3](#case 3)
ref:
深入理解JobScheduler与JobService的使用 - 掘金 (juejin.cn)
(28条消息) JobService的使用介绍_TechMerger的博客-CSDN博客
(28条消息) JobService源码探究之 onStartJob()返回false立马被destroy_onstartjob()耗时_TechMerger的博客-CSDN博客
JobService是Service的一个强化版
,本质属于Service,因此,添加一个JobService需要到清单文件中注册Service组件。
JobService的创建过程:
(1)继承JobService
(2)重写回调onStartJob和onStopJob (必须)
java
public class JobSchedulerService extends JobService{
@Overrid
public boolean onStartJob(JobParameters params){
return false;
}
@Override
public boolean onStopJob(JobParameters params){
return false;
}
}
一、API详解
1 onStartJob
当系统要触发执行我们的Job的时候,会调用onStartJob
方法。这个方法会返回一个布尔型的值。
当返回false
的时候,系统会认为onStartJob
这个方法返回的时候,我们要做的工作已经做完了,这不是一个耗时的工作。
当返回true
的时候,系统会认为我们要执行一个耗时的工作,在onStartJob
这个方法返回的时候,我们的工作仍然在异步执行 。当我们的工作执行完成的时候,我们必须手动调用 jobFinished(JobParameters params, boolean needRescheduled)
务必要注意 ,如果onStartJob
返回了true,在异步工作执行完成之后,我们必须手动调用jobFinished
方法;
如果不调用jobFinished
,系统会一直认为我们在执行当前Job,那么系统就不会再入队其他的Job去执行 ,也就是说JobScheduler的执行队列就会被阻塞了
2 onStopJob
当系统收到一个cancel job
的请求且这个job仍然在执行时,系统就会调用onStopJob
方法。
也就是说在系统受到取消请求时,并不会一定会调用onStopJob
方法,只有onStartJob
返回true
的时候,才会调用onStopJob
,否则不调用。 --> onStartJob() 在函数执行结束时如果没有return false,则Job仍在异步执行。
但不论是否调用onStopJob
方法,系统受到取消请求时,都会取消该job(具体怎么取消,在讲源码的时候在分析).
需要注意的是,JobService
是运行在我们应用的主线程,这意味着我们需要开启新线程或者使用Handler或者AsyncTask来处理耗时的工作。