以下就JobService的执行流程,系统层实现进行详解
入口点在JobScheduler.scheduler
系统层JobScheduler是个抽象类,它的实现类是JobScheduler
mBinder,一看就知道这里面肯定是跨进程了。它的服务端在JobSchedulerService里面,具体
为什么请看系统服务器启动流程相关文章,这里不做过多解释;
我们看到这个方法就是从客户端远程调用入口,接着就进入了JobSchedulerService服务
在进入下一步之前会先检查用户自定义的服务是否指定android.permission.BIND_JOB_SERVICE
这个权限,如果没有就直接抛出异常,这就是为什么在manifest中注册服务器的时候一定要配置该权限的原因
这里面做的一些场景判断比较多,这里贴图只放了重要了地方;
以下大概是如果任务已经存在,就采取相应措施处理,这里直接讲解不存在的情况