android JobScheduler 使用和分析
来源:互联网 发布:国家针对大数据的规划 编辑:程序博客网 时间:2024/05/17 03:05
使用:
一,app要写一个service继承自 JobService 并实现
@Override public boolean onStartJob(JobParameters params) { return false; }
@Overridepublicboolean onStopJob(JobParameters params) {returnfalse; }
二,得到 JOB_SCHEDULER_SERVICE
mJobScheduler = (JobScheduler) getSystemService( Context.JOB_SCHEDULER_SERVICE );
三,生成jobinfo:
JobInfo.Builder builder = new JobInfo.Builder( 1,
new ComponentName( getPackageName(),
JobSchedulerService.class.getName() ) );
这里的JobSchedulerService是第一步里创建的类.
四,设置其它一些属性.根据需求来写.
五,最后把这个jobinfo发给fw处理:
if( mJobScheduler.schedule( builder.build() ) <= 0 ) { //If something goes wrong}
原理分析:
从JobSchedulerService.JobSchedulerStub.schedule开始.
走到JobSchedulerService.scheduleAsPackage.在这个里面创建JobStatus对象
三,调用 JobSchedulerService.startTrackingJob.把这个jobstatus放入mJobs里.
四,然后根据这个JobStatus.找到对应的controller.并调用controller的maybeStartTrackingJobLocked
五,controller的事件满足后,会促发回调.走到onControllerStateChanged onRunJobNow onDeviceIdleStateChanged等这几个回调
六,直接看看 JobSchedulerService.onRunJobNow.这个会发出MSG_JOB_EXPIRED消息.
七.这个消息会对job做一些处理.比如加入pending队列什么的.
八,调用JobSchedulerService.JobHandler.maybeRunPendingJobsH.这个里面会去找一个JobServiceContext来处理可以执行的jobstatus.
也就是通过final Intent intent = new Intent().setComponent(job.getServiceComponent());
boolean binding = mContext.bindServiceAsUser(intent, this,
Context.BIND_AUTO_CREATE | Context.BIND_NOT_FOREGROUND,
new UserHandle(job.getUserId()));
来调用前面应用端写的service.
0 0
- android JobScheduler 使用和分析
- Android中JobScheduler和JobService的简单使用示例
- Android 5.0中使用JobScheduler
- 在Android中使用JobScheduler
- Android之JobScheduler运行机制源码分析
- Android系统分析之JobScheduler源码分析
- Android系统分析之JobScheduler源码分析
- Android 7.0之JobScheduler 分析(一)——如何使用job
- Android JobScheduler
- Android-JobScheduler
- Android JobScheduler
- 在Android 5.0中使用JobScheduler
- 在Android 5.0中使用JobScheduler
- 在Android 5.0中使用JobScheduler
- 在Android 5.0中使用JobScheduler
- 在Android Lollipop上使用JobScheduler API
- 在Android 5.0中使用JobScheduler
- Android 5.0中使用JobScheduler 调度作业
- atom无法安装插件解决方法
- 单例模式的七种写法
- Q&A——UI输入(三)
- MySQL数据库优化经验详谈
- 史上最详细Fragment讲解
- android JobScheduler 使用和分析
- Andrew Ng的机器学习课程概述(三)
- 4. Selenium2 自动化测试实战-基于Python语言-跨目录模块调用
- JS放大镜特效(兼容版)
- 二维数组中的查找
- Gitcafe使用笔记
- 20条java有用的片段
- centos系统中网络配置相关
- Java NIO 系列教程