android---JobScheduler android任务调度处理组件(类似QuartZ)
JobScheduler是Android L(API21)新增的特性,用于定义满足某些条件下(电量,网络,时间,屏幕熄/亮 ,设备是否空闲 等)执行的任务。它的宗旨是把一些不是特别紧急的任务放到更合适的时机批量处理,这样可以有效的节省电量。
自 Android 5.0 发布以来,JobScheduler 已成为执行后台工作的首选方式,其工作方式有利于用户。应用可以在安排作业的同时允许系统基于内存、电源和连接情况进行优化。JobScheduler 可实现控制和简洁性。
schedule用法过程说明:
一 创建继承于JobService的对象(该service运行在主线程)
1 在onStartJob中完成具体的业务逻辑
2 当系统接收到一个取消请求时,系统会调用onStopJob方法取消正在等待执行的任务
二 创建JobInfo对象(采用builder模式),设置监听任务执行的条件(监听电量,网络,时间,屏幕亮/熄,设备是否空闲 等)
创建定时任务时,你可以使用JobInfo.Builder来构建一个JobInfo对象,然后传递给Scheduler底层的jobSchedulerService。
JobInfo.Builder接收两个参数,第一个参数是你要运行的任务的标识符ID,第二个是这个JobService组件的类名。
1 ComponentName jobService = new ComponentName(this, MyJobService.class); //JobService组件的名包裹
2 JobInfo jobInfo = new JobInfo.Builder(123, jobService) //任务Id等于123
.setMinimumLatency(5000)// 任务最少延迟时间
.setOverrideDeadline(60000)// 任务deadline,当到期没达到指定条件也会开始执行
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)// 网络条件,默认值NETWORK_TYPE_NONE
.setRequiresCharging(true)// 是否充电
.setRequiresDeviceIdle(false)// 设备是否空闲
.setPersisted(true) //设备重启后是否继续执行
.setBackoffCriteria(3000,JobInfo.BACKOFF_POLICY_LINEAR) //设置退避/重试策略
.build();
三 先获取JobScheduler调度器的代理对象(要理解这个过程,那么就需要先看看JobSchedulerService的启动过程)
JobScheduler scheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
1 对象里面主要有schedule(jobinfo对象执行条件) 启动:
scheduler.schedule(jobInfo);
2 有cancel(job任务id) 取消:
scheduler.cancel(123); //取消jobId=123的任务
scheduler.cancelAll(); //取消当前uid下的所有任务
JobScheduler是个系统Service,我们的将自己的JobInfo传给它,由系统负责调用,其中这个schedule方法会返回一个整型。如果schedule方法失败了,它会返回一个小于0的错误码。否则它会我们在JobInfo.Builder中定义的标识id。
如果你的应用想停止某个任务,你可以调用JobScheduler对象的cancel(int jobId)来实现;如果你想取消所有的任务,你可以调用JobScheduler对象的cancelAll()来实现。
JobScheduler调度器过程(JobSchedulerService的启动过程)
https://www.cnblogs.com/softwarelanguagebs/p/9531562.html
工作1-3年,基础知识,多看书。多跟着别人做项目,学习经验。 工作3-5年,新知识,高级知识,自己独立做项目,总结经验。尝试不同的语言。 工作5-8年,工作职位,要从设计,管理方面要求自己,可以尝试走管理路线(项目经理或cto)。 工作10年及以上, 自己做些项目,产品,尝试为创业做准备。 上大学和不上大学区别很大,上品牌大学和普通大学区别也很大,后天的努力最大。 ---无论它是在遥远的远方,还是在出发的地方、哪里有希望哪里就是我们的方向;终点、只不过是梦想起飞的地方。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通