JobService 和 JobScheduler Android5.0以上的进程保活

JobService 和 JobScheduler Android5.0以上的进程保活

Android 5.0 新增了一个 JobScheduler API,允许您定义一些系统在稍后或指定条件下(如设备充电时)以异步方式运行的作业,从而优化电池寿命。下列情形下,作业计划排定功能很有用:
•   应用具有不面向用户并且可以推迟的作业
•   应用具有您更愿意在设备插入电源时再进行的作业
•   应用具有一项需要接入网络或连接 WLAN 的任务。
•   应用具有多项您希望定期以批处理方式运行的任务。

演示demo如下:

1.创建自定义的 Service 继承 JobService

public class MyJobService extends JobService {
}
重写 onStartJob 方法,返回true表示正在执行,此处模拟执行耗时操作的task
public boolean onStartJob(JobParameters params) {
    Log.e(TAG, "onStartJob  jobId = " + params.getJobId());
    new SimpleTask().execute(params);
    return true;
}
private class SimpleTask extends AsyncTask<JobParameters, Void, String> {

    private JobParameters mJobParam;

    @Override
    protected String doInBackground(JobParameters... params) {
        mJobParam = params[0];
        sendMessage(MainActivity.MSG_JOB_START, mJobParam);
        try {
            Thread.sleep(3000);
            return new String("任务执行结束--->");
        } catch (Exception e) {
            return "ERROR";
        }
    }

    @Override
    protected void onPostExecute(String result) {
        jobFinished(mJobParam, false); // 手动结束
        Log.e(TAG, "获取结果:" + result);
        sendMessage(MainActivity.MSG_JOB_STOP, mJobParam);
    }
}

2. 在 Manifest 中声明:

<service
  android:name=".service.MyJobService"
  android:permission="android.permission.BIND_JOB_SERVICE" />

3. 在 activty 中启动任务

private void init() {
    mHandler = new IncomingMessageHandler(this);
    Intent startServiceIntent = new Intent(this, MyJobService.class);
    Messenger messengerIncoming = new Messenger(mHandler);
    startServiceIntent.putExtra("messenger", messengerIncoming);
    startService(startServiceIntent);

    mJobScheduler = (JobScheduler)     
    getSystemService(Context.JOB_SCHEDULER_SERVICE);
}
这里分为两种方式,需要注意的是,以Periodic方式大约是15分钟执行一次,而另一种是立即执行
private void startJob(boolean isPeriodic) {
    ComponentName jobService = new ComponentName(this, MyJobService.class);
    JobInfo.Builder builder = new JobInfo.Builder(jobId++, jobService);

    if (isPeriodic) {
        builder.setPeriodic(3000);
    } else {
        builder.setMinimumLatency(1000);
        builder.setOverrideDeadline(1000 * 30);
    }

    // 设置网络条件
    builder.setRequiresCharging(false);    // 设置是否充电
    builder.setRequiresDeviceIdle(false);  // 设置手机是否空闲
    JobInfo jobInfo = builder.build();
    mJobScheduler.schedule(jobInfo);
}
DEMO说明: 点击start with perodic 会间隔15分钟执行一次任务,而点击 start with deadline 会立即启动

这里写图片描述


DEMO 下载地址:
http://download.csdn.net/download/desireyaoo/10174343

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值