喜欢看文档,不知道这是个好习惯还是坏习惯。好的一方面在于,你能知道谷歌爸爸这么设计的原因,也能知道很细节的东西,不仅仅是会使用而已。坏处呢就是,你会花费比较多的时间去了解原理以及很多细节,如果你的项目只是需要你能用就行的话,那你可能还会耽误项目进度。哈哈。
上面是一些闲话,算是说说我为什么喜欢去翻译、记录谷歌文档,一来工作需要,二来就是能够更透彻的理解知识点,下面进入正题。
英文文档:JobScheduler
1、JobScheduler
JobScheduler 继承自 Object,自API21加入。
JobScheduler 是一个系统在 你的应用进程中 执行各种各样你指定的任务的API。查看 JobInfo 可以看到更多关于各种任务的描述,以及如何创建和执行他们。你可以创建并把JobInfo传入schedule(android.app.job.JobInfo)中,当你设置的条件满足时,系统就会执行你应用中定义的 JonService,并将该 JobInfo 作为参数传入。你可以使用 JobInfo.Builder.JobInfo.Builder(int, android.content.ComponentName) 方法,创建JobInfo 。
系统执行Job有一定策略,会尽可能晚,并且一批一批的执行任务。如果你没有指定任务的最晚执行时间,那么该任务有可能在任何时刻被执行,这取决于当前 JobScheduler 内部队列的情况。
当任务被执行时,系统会持有一个你应用的软引用,因此,你并不需要做任何事情来保证设备出于唤醒状态。
2、JobInfo
JobInfo 继承自 Object ,实现了 Parcelable 接口。自API21加入。
JobInfo 是一个在被传递给 JobScheduler 时包含了执行任务所需的全部数据的容器。使用 JobInfo.Builder 进行构造。你必须至少指定一个任务执行的约束条件,其目的是为了系统能更好的完成你指定的任务,否则你的应用很可能会抛出异常。
3、JobService
JobService 继承自 Service。自API21加入。
JobScheduler中回调的入口点。也就是说,JobScheduler 在执行你的应用添加的job时,会启动对应指定的JobService。
JobService是处理任务调度的基础,同时你需要在JobService#onStartJob(JobParameters)方法中实现你的任务逻辑。JobService会在你的每一个任务被执行时都被调用,并且是在应用的主线程中调用。这意味着,你可能需要在其他线程中去进行你的任务逻辑。例如:another thread/handler/AsyncTask。当任务条件不再满足时,系统会回调 onStopJob(android.app.job.JobParameters) 方法通用你。