JobScheduler使用中遇到的onStopJob没有回调的问题

今天主管说有一个延迟任务机制JobScheduler,我说我研究下,于是我搜索了下,这篇写的不错:http://blog.csdn.net/bboyfeiyu/article/details/44809395


按照文档说的写完之后效果也出来了,但是存在一个问题那就是取消任务的问题,就如上面博文所说:

这里写图片描述

于是我调用jobFinished方法后我以为onStopJob方法会被调用,却发现并没有执行,于是我开始看源码

这里写图片描述

发现这个方法执行的并没有去调用onStopJob方法,那么我就想到底什么时候会调用,我猜想是不是cancel的时候才会调用,于是我又去测试了一翻,结果发现还是没有调用(这边onStartJob我是10秒执行的),这就很尴尬了。{:大哭}

我又看了一遍上面的博文仔细的想了一下,他既然说onStopJob的调用与否和onStartJob的返回值有关,那是不是只有在onStartJob中执行完才会有效果,于是我在onStartJob方法里面加了一个延迟任务,任务没结束前去取消任务,果然onStopJob回调了,这真的是坑啊,取消任务还必须要开始后才能有效,然而想要达到真的取消只能另想他法了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
JobScheduler是Android用于调度和执行后台任务的系统服务。它可以在特定的时间间隔或满足特定条件时执行任务。以下是JobScheduler的基本用法: 1. 创建JobService类: 创建一个继承自android.app.job.JobService的类,用于执行后台任务。 2. 在AndroidManifest.xml注册JobService: 在<application>标签内添加以下代码: ```xml <service android:name=".YourJobService" android:permission="android.permission.BIND_JOB_SERVICE" /> ``` 3. 创建JobInfo对象: ```java int jobId = 1; // 用于标识任务的唯一ID JobInfo.Builder builder = new JobInfo.Builder(jobId, new ComponentName(this, YourJobService.class)); ``` 4. 设置触发条件和约束条件: ```java builder.setPeriodic(10000); // 设置任务的执行周期,单位为毫秒 builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); // 设置网络连接条件 // 可以设置更多的约束条件,如setRequiresCharging()、setRequiresDeviceIdle()等 ``` 5. 调用JobScheduler.schedule()方法来安排任务: ```java JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE); jobScheduler.schedule(builder.build()); ``` 6. 处理任务逻辑: 在YourJobService类重写onStartJob()方法,在该方法执行后台任务逻辑。 ```java @Override public boolean onStartJob(JobParameters params) { // 执行后台任务逻辑 return false; // 返回false表示任务已完成,返回true表示任务需要继续执行 } @Override public boolean onStopJob(JobParameters params) { // 如果任务被取消,可在此方法处理相关逻辑 return false; // 返回true表示任务应该重新计划执行,返回false表示任务已被完全处理 } ``` 注意事项: - JobScheduler是Android 5.0(API级别21)及更高版本引入的特性。 - 在使用JobScheduler时,需要在AndroidManifest.xml文件添加相应的权限: ```xml <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> ``` - 任务的执行时间可能会受到系统资源和设备状态的影响,无法保证精确的执行时间。 以上是JobScheduler的基本用法,你可以根据具体的需求和条件设置更多的参数和约束条件。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值