android——服务JobService

JobService是Android L时候官方新增的组件,适用于需要特定条件才执行后台任务的场景。由系统统一管理和调度,在特定场景下使用JobService更加灵活和省心,相当于是Service的加强或者优化。

JobService是JobScheduler的回调,是安排的Job请求的实际处理类。需要我们覆写onStartJob (JobParameters)方法,并在里面实现实际的任务逻辑。因为JobService的执行是在APP的主线程里响应的,所以必须提供额外的异步逻辑去执行这些任务。

代码如下:

import android.app.AlarmManager;
import android.app.PendingIntent;
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.content.Intent;
import android.os.Build;

public class MyJobService extends JobService {
    private static final int JOB_ID = 1;
    private static final long INTERVAL_MILLIS = 10 * 1000; // 10 seconds

    @Override
    public boolean onStartJob(JobParameters params) {
        // 在这里执行你的后台任务
        System.out.println("==Job started==");
        scheduleJob(getApplicationContext()); // 重新调度作业
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        // 在这里取消你的后台任务
        System.out.println("Job stopped");
        return false;
    }

    public static void scheduleJob(Context context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
            ComponentName componentName = new ComponentName(context, MyJobService.class);
            JobInfo jobInfo = new JobInfo.Builder(JOB_ID, componentName)
                    .setMinimumLatency(INTERVAL_MILLIS)
                    .setOverrideDeadline(INTERVAL_MILLIS)
                    .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
                    .build();
            jobScheduler.schedule(jobInfo);
        } else {
            // 在 Android N 以下版本,使用 AlarmManager 实现定时任务
            Intent intent = new Intent(context, MyJobService.class);
            PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
            AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 1000, pendingIntent);
        }
    }
}

在activity里面调用:

MyJobService.scheduleJob(this)

你可能感兴趣的:(kotlin,-,java,android)