android任务调度管理平台系统,Android任务调度JobScheduler,JobService

Android任务调度JobScheduler,JobService

首先定义一个JobService:

import android.app.job.JobParameters;

import android.app.job.JobService;

import java.util.concurrent.TimeUnit;

/**

* 注意:JobService运行在主线程,需要开启新线程处理耗时工作。

*

* 当系统把JobService所在App杀掉后,仍会在之前JobInfo设定的周期和延迟时间执行。

* Android系统仍会根据jobId执行之前未完成的Job。

*/

public class MyJobService extends JobService {

private JobParameters parameters;

private int progress = -1;

/**

* 如果返回值是false,系统认为这个方法返回时任务已经执行完毕。

* 如果返回值是true,系统认为这个任务要被执行。

*

* @param params

* @return

*/

@Override

public boolean onStartJob(JobParameters params) {

this.parameters = params;

// 开启新线程处理耗时工作。

startMyLongTimeWork();

// 当返回true时,系统会认为我们执行一个耗时任务。

// onStartJob方法返回时,开发者运行的线程任务仍在异步执行。

// 当开发者的任务执行完成时,必须手动调用jobFinished(JobParameters params, boolean needRescheduled)通知系统。

return true;

}

@Override

public boolean onStopJob(JobParameters params) {

System.out.println("onStopJob");

return false;

}

/**

* 模拟一个耗时的后台线程任务。

*/

private void startMyLongTimeWork() {

new Thread(new Runnable() {

@Override

public void run() {

while (true) {

try {

TimeUnit.SECONDS.sleep(1);

System.out.println(parameters.getJobId() + " 后台线程任务:" + progress);

progress++;

} catch (InterruptedException e) {

e.printStackTrace();

}

if (progress > 100) {

break;

}

}

jobFinished(parameters, false);

}

}).start();

}

}

写入到Androidmanifest.xml文件:

android:name=".MyJobService"

android:permission="android.permission.BIND_JOB_SERVICE" />

使用:

private void test() {

JobScheduler mJobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);

//关键。

int jobId = (int) (Math.random()*1000);

ComponentName componentName = new ComponentName(this, MyJobService.class);

JobInfo jobInfo = new JobInfo.Builder(jobId, componentName)

.setMinimumLatency(3000)//最小延时3秒。

.setOverrideDeadline(5000)//超过10秒后无论如何也要执行。

.setRequiredNetworkType(JobInfo.NETWORK_TYPE_NOT_ROAMING)//非移动网络。

//.setPeriodic (long intervalMillis)//执行周期,每隔一段时间间隔执行一次。

//.setPersisted(boolean isPersisted);//设置设备重启后,任务是否保留。需要权限:RECEIVE_BOOT_COMPLETED

//.setRequiresCharging(boolean )//是否需要充电。

//.setRequiresDeviceIdle(boolean)//是否需要等设备空闲状态时候运行。

//.addTriggerContentUri(uri)//监听uri数据发生改变,触发任务执行。

//.setTriggerContentMaxDelay(long duration)//设置Content发生变化一直到任务被执行最大延迟时间。

//.setTriggerContentUpdateDelay(long durationMilimms)//设置Content发生变化一直到任务被执行中间的延迟。如果在这个延迟时间内content发生了改变,延迟时间会重写计算。

.build();

//开始运行job。

mJobScheduler.schedule(jobInfo);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值