Android-JobService

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来处理耗时的工作。

二、onStartJob | onStopJob 返回值

case 1

case 2

case 3

相关推荐
一起搞IT吧15 分钟前
高通camx IOVA内存不足,导致10-15x持续拍照后,点击拍照键定屏无反应,过一会相机闪退
android·数码相机
前行的小黑炭2 小时前
设计模式:为什么使用模板设计模式(不相同的步骤进行抽取,使用不同的子类实现)减少重复代码,让代码更好维护。
android·java·kotlin
ufo00l3 小时前
2025年了,Rxjava解决的用户痛点,是否kotlin协程也能解决,他们各有什么优缺点?
android
古鸽100863 小时前
libutils android::Thread 介绍
android
_一条咸鱼_3 小时前
Android Compose 框架性能分析深度解析(五十七)
android
BrookL3 小时前
Android面试笔记-kotlin相关
android·面试
QING6186 小时前
Kotlin Delegates.notNull用法及代码示例
android·kotlin·源码阅读
QING6186 小时前
Kotlin filterNot用法及代码示例
android·kotlin·源码阅读
张风捷特烈21 小时前
Flutter 伪3D绘制#03 | 轴测投影原理分析
android·flutter·canvas
omegayy1 天前
Unity 2022.3.x部分Android设备播放视频黑屏问题
android·unity·视频播放·黑屏