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 会立即启动

JobService 和 JobScheduler Android5.0以上的进程保活_第1张图片


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

你可能感兴趣的:(Android,技术)