本文主要是介绍Android JobService启动系统源码分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
以下就JobService的执行流程,系统层实现进行详解
入口点在JobScheduler.scheduler
系统层JobScheduler是个抽象类,它的实现类是JobScheduler
mBinder,一看就知道这里面肯定是跨进程了。它的服务端在JobSchedulerService里面,具体
为什么请看系统服务器启动流程相关文章,这里不做过多解释;
我们看到这个方法就是从客户端远程调用入口,接着就进入了JobSchedulerService服务
在进入下一步之前会先检查用户自定义的服务是否指定android.permission.BIND_JOB_SERVICE
这个权限,如果没有就直接抛出异常,这就是为什么在manifest中注册服务器的时候一定要配置该权限的原因
这里面做的一些场景判断比较多,这里贴图只放了重要了地方;
以下大概是如果任务已经存在,就采取相应措施处理,这里直接讲解不存在的情况
要搞懂这里面的,就得搞懂mController里面存的是什么,我们可以看看下下张图,它是在构造函数的中添加的,基类都是StateController,主要是用于实现各种条件约束的。比如网络、电量等条件约束。maybeStartTrackingJobLocked这个方法是通知各个条件约束控制器,有新的任务需要监听,如果有必要就跟踪他们的状态,当满足条件的时候就通知。
到这里JobService的启动相关信息已经添加到了系统服务中,并且如果指定要任务是持久化的,系统还会将任务信息记录都文件中保存。
接下来我们,进入网络状态控制器里面看看他是如果监听网络变化并通知启动我们自定义的JobService的
在构造时候注册了网络状况变化回调
mStateChangedListener这里其实就是JobSchedulerService
发送CHECK_JOB消息后,会检查所有未启动的任务,如果满足的条件,就将其加入到即将运行的队列中去,等待去执行
这个方法里面会根据系统的内存紧张级别对同时执行的任务数量做个动态调整
最终会走到下面这个方法,来启动用户自定义的服务,到这里我们自己定义的服务启动了,接下来我们看下onStartJob是如何被触发的
接下来会执行了JobEngineService
到此就执行到了onStartJob
注意,如果onStartJob和onStopJob返回true,它会继续等待下次满足了约束条件继续执行,false下次就不再执行。
到此分析完毕,如果有错误的地方麻烦指出,谢谢。
这篇关于Android JobService启动系统源码分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!