Android中JobScheduler和JobService的简单使用示例
来源:互联网 发布:国盛证券交易软件 编辑:程序博客网 时间:2024/05/29 14:36
JobScheduler可以安排一个周期性的任务,同时与AlarmManager相比,
它可以提前设定任务的执行条件。
具体的使用方法,类似于如下代码:
..............//得到JobScheduler对象JobScheduler scheduler = (JobScheduler) getActivity() .getSystemService(Context.JOB_SCHEDULER_SERVICE);//判断是否已经安排过任务if (isJobPollServiceOn()) { //每个具体的任务,都对应一个ID,这里是取消任务的接口 scheduler.cancel(JOB_ID);} else { //此处定义具体的任务 JobInfo jobInfo = new JobInfo.Builder( //指定任务ID和任务对应的JobService,实际的任务将有JobService的子类来完成 JOB_ID, new ComponentName(getContext(), JobPollService.class)) //设定任务的启动条件 //还有其它接口,例如setRequiresCharging等 .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) //设置任务的周期 .setPeriodic(1000 * 10 * 15) //设置任务常驻,即开机启动,要求RECEIVE_BOOT_COMPLETED权限 .setPersisted(true) .build(); //安排任务 scheduler.schedule(jobInfo);}..............
上述代码中,判断一个任务是否已经安排过的代码如下:
@TargetApi(Build.VERSION_CODES.LOLLIPOP)private boolean isJobPollServiceOn() { JobScheduler scheduler = (JobScheduler) getActivity() .getSystemService(Context.JOB_SCHEDULER_SERVICE); boolean hasBeenScheduled = false; //getAllPendingJobs得到是当前Package对应的已经安排的任务 for (JobInfo jobInfo : scheduler.getAllPendingJobs()) { if (jobInfo.getId() == JOB_ID) { hasBeenScheduled = true; break; } } return hasBeenScheduled;}
从前面的代码,我们知道任务的实际执行者是JobService的子类,
其示例代码如下,主要重写onStartJob、onStopJob等接口:
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)public class JobPollService extends JobService { ............ @Override public boolean onStartJob(JobParameters params) { //执行实际的工作 //onStartJob在主线程中调用,因此耗时工作需要利用独立线程来完成 ............. //任务完成后,调用jobFinished接口 //第二个参数的描述是:needsReschedule //当为true时,表示当前任务需要下次重新安排 jobFinished(params, false); return true; } //当JobService结束时,将回调该接口 //return true表示任务下次继续;return false表示不需要继续 @Override public boolean onStopJob(JobParameters params) { ............... return true; }}
定义了JobService的子类后,需要在AndroidManifest.xml中进行声明:
...........<service android:name=".service.JobPollService" //声明权限,使得仅有JobScheduler可以调用该服务 android:permission="android.permission.BIND_JOB_SERVICE" android:exported="true"/>............
本篇博客暂时只记录JobScheduler相关的基本用法,后续再进行补充。
0 0
- Android中JobScheduler和JobService的简单使用示例
- Android JobScheduler/JobService 工作调度
- JobScheduler和JobService机制保活进程
- Android 5.0中使用JobScheduler
- 在Android中使用JobScheduler
- android JobScheduler 使用和分析
- JobService和JobScheduler机制在Android5.0以上保活
- JobService和JobScheduler机制在Android5.0以上保活
- JobService和JobScheduler机制在Android5.0以上保活
- 在Android 5.0中使用JobScheduler
- 在Android 5.0中使用JobScheduler
- 在Android 5.0中使用JobScheduler
- 在Android 5.0中使用JobScheduler
- 在Android 5.0中使用JobScheduler
- Android 5.0中使用JobScheduler 调度作业
- 在Android 5.0中使用JobScheduler
- 在Android 5.0中使用JobScheduler
- 在Android 5.0中使用JobScheduler
- Android中PendingIntent的简单使用
- 数据库——分类目录
- 【Android】安卓开发实战之使用layout_weight优化布局
- Map集合的四种遍历方式
- python复习笔记[4]——列表
- Android中JobScheduler和JobService的简单使用示例
- 01R与Rstudio的获取与安装
- AFNetworking打印输出服务器返回的错误信息
- 解决ifconfig 只显示lo
- 双远心镜头原理及选型(一)
- 个人总结 入门安装Qt
- Could not resolve com.android.tools.build:gradle:1.0.0+.
- 基于XMPP协议的Android即时通信系
- leetcode_middle_55_334. Increasing Triplet Subsequence