android 7 JobScheduler实现APP保活

前言

JobScheduler:当一系列预置的条件被满足时,JobScheduler API为你的应用执行一个操作,例如当设备接通电源适配器或者连接到WIFI,在API 21 ( Android 5.0(Lollipop) )中,google提供了一个新叫做JobScheduler API的组件来处理这样的场景。
在API 24 ( Android 7.0(N) )的新特性中,Google对于新设备功耗要求越来越严格,对于APP的限制也越来约多,想继续像Android5.0、6.0一样简单处理定时执行执行周期性作业,需要做出一些代码调整,针对该需求,总结了2种解决方案供参考。

  • setPeriodic
    setPeriodic:按时间间隔执行周期性作业,在Android 5、6平台版本下可以间隔任何时间运行,在Android7.0平台版本上需设置定期作业的间隔时间>=15分钟时才能运行。

  • setMinimumLatency
    设置作业延迟执行的时间,与setPeriodic不可同时执行,可配置setOverrideDeadline设置作业最大延迟执行时间。

  • setRequiredNetworkType
    设置作业只有在满足指定的网络条件时才会被执行

/** 默认条件,不管是否有网络这个作业都会被执行 */
public static final int NETWORK_TYPE_NONE = 0;
/** 任意一种网络这个作业都会被执行 */
public static final int NETWORK_TYPE_ANY = 1;
/** 不是蜂窝网络( 比如在WIFI连接时 )时作业才会被执行 */
public static final int NETWORK_TYPE_UNMETERED = 2;
/** 不在漫游时作业才会被执行 */
public static final int NETWORK_TYPE_NOT_ROAMING = 3;

解决方案1

使用Context.getSystemService(Context.JOB_SCHEDULER_SERVICE)创建JobScheduler对象,配置调度工作setMinimumLatency等参数,延迟运行Job Service,在JobSchedulerService服务的onStartJob方法中启动保活服务,再创建一个新的JobScheduler任务,并结束当前JobScheduler任务。

如果正在运行需要很长时间的任务,则下一个任务将安排在当前任务完成时间+ PROVIDED_TIME_INTERVAL

  • 创建JobScheduler
    设置setExtras参数,将需要保活的服务名称传递至Job Service
 //API大于24
 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                    //7.0+
                    mJobScheduler = (JobScheduler) mContext.getSystemService(Context.JOB_SCHEDULER_SERVICE);
                    JobInfo.Builder builder = new JobInfo.Build
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值