jobschedule源码如何启动jobService

//使用jobschedule最后会调用下面的提交方法。

jobschedule.schedule(jobInfo)

源码

schedule(jobInfo)这方法是jobSchedule.stud对象的

schedule(jobInfo,uid)这方法是jobschedulerService对象的

startTrackingJob(jobStatus),参数jobStatus其实是jobInfo 和uid的包装类,其构造方法就是这两个参数。后面基本都是对jobstatus对象操作。

这个方法先会判断jobInfo对象是否可以更新(以前是否用过),可以就返回true,不可以就返回false

再遍历mControllers控制器集合,获取控制器对象(这里以获取connectivityController控制器对象为例),

如果jobinfo可以更新就调用maybeStopTrackingJob(jobStatus) ;不能更新调用MaybeStartTrackingJob(JobStatus);

MaybeStartTrackingJob(JobStatus)方法做了些逻辑判断最后把jobStatus放进mTrackedJobs集合里面

 

我们看看connectivityController控制器做了些什么事,它会发个广播来接受系统网络状态变化的广播

onReceiver方法接受广播,变量mTrackedJobs集合 判断uid是否能用,判断广播和我们创建JobInfo设置的广播是否一致,当所以条件满足时,最后实现onControllerChanger接口,

onControllerChanger

jobScheduleService在集合mControllers添加控制器connectivityController时把jobScheduleService传进去了,并且jobScheduleService实现了onControllerChanger接口,当执行者回调方法,说明任务可以执行,jobScheduleService就发送个handle信息,在handlerMessage方法里面做了两件事

1做很多逻辑判断,把最后能执行的jobStatus对象放进mPendings集合里面

2遍历mPendings集合,通过集合里面的jobStatus对获取jobInfo 再获取Component,

使用Intent 把component装进去,再通过context绑定启动service,把intent装进service里面这样就在需要的情况下启动服务。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值