在Android Oreo中,JobIntentService(继承自IntentService)的行为发生了变化。在Oreo及更高版本中,JobIntentService会自动关闭自身,以避免可能的内存泄漏。
要解决这个问题,可以使用以下方式来处理:
public class MyWorker extends Worker {
public MyWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
// 在这里执行后台任务
return Result.success();
}
}
// 在需要执行后台任务的地方调用以下代码:
OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(MyWorker.class).build();
WorkManager.getInstance().enqueue(workRequest);
public class MyJobService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
// 在这里执行后台任务
jobFinished(params, false);
return false;
}
@Override
public boolean onStopJob(JobParameters params) {
return false;
}
}
// 在需要执行后台任务的地方调用以下代码:
JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
ComponentName componentName = new ComponentName(this, MyJobService.class);
JobInfo jobInfo = new JobInfo.Builder(1, componentName)
.setMinimumLatency(1000) // 设置任务的延迟执行时间
.build();
jobScheduler.schedule(jobInfo);
通过使用WorkManager或JobScheduler,可以避免Android Oreo中JobIntentService自动关闭的问题,并且可以正常执行后台任务。