Android 进程保活(五)JobSheduler进程重生

Android 进程保活(五)JobSheduler进程重生

八月 06, 2019

JobSheduler在android 5.0以上版本可用,所以该方案适合5.0以上的系统版本。
关于JobService与JobSheduler不清楚的可参考官网API文档:

官网JobService

官网JobScheduler

JobScheduler是用于计划基于应用进程的多种类型任务的api接口。当任务执行时,系统会为应用持有WakeLock,所以应用不需要做多余的确保设备唤醒的工作。

JobService继承自Service,是用于处理JobScheduler中规划的异步请求的特殊Service

使用JobService必须先在AndroidManifest.xml中声明service和权限

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

我们来实现一个JobService,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package com.baweigame.mvvmdemoapplication;

import android.app.job.JobInfo;
import android.app.job.JobParameters;
import android.app.job.JobScheduler;
import android.app.job.JobService;
import android.content.ComponentName;
import android.content.Context;
import android.os.Build;
import android.support.annotation.RequiresApi;
import android.util.Log;

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class MyJobService extends JobService {
@Override
public void onCreate() {
super.onCreate();
startJob();
}

/**
* 开启工作
*/
private void startJob() {
JobInfo.Builder builder = new JobInfo.Builder(1001, new ComponentName(getPackageName(), MyJobService.class.getName()));
//500毫秒调用一次
builder.setPeriodic(500);
builder.setPersisted(true);
JobScheduler jobScheduler = (JobScheduler) this.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(builder.build());
}

@Override
public boolean onStartJob(JobParameters params) {
Log.d("123", "onStartJob: ...");
return false;
}

@Override
public boolean onStopJob(JobParameters params) {
Log.d("123", "onStopJob: ...");
return false;
}
}

在Activity启动服务,如:

1
startService(new Intent(this,MyJobService.class));

我们添加了一个JobService并在服务启动及停止时加入了日志输出。
使用JobScheduler来调度服务,每500毫秒调用一次。
我们启动App来观察服务启动log的打印情况,启动后每500毫秒打印一次。我们手动关闭所有进程,发现服务停止后有复活了,正常输出了log信息。

注意:清单文件中加入相关权限。如:

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

Android 进程保活系列:

Android 进程保活(一)写在前面
Android 进程保活(二)双服务进程包活
Adnroid 进程保活(三)1像素方案保活
Android 进程保活(四)使用“前台服务”保活
Android 进程保活(五)JobSheduler进程重生