如何在给定时间运行作业服务



我想创建一个类似提醒应用程序的东西,在给定时间通知用户,我想使用作业调度程序 API 来实现这一点,假设我想在上午 9 点和凌晨 12 点运行该服务,应该在以下代码中添加什么来实现这一点。

public void startJobService(){
    GooglePlayDriver driver = new GooglePlayDriver(this);
    FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(driver);
    Bundle myExtrasBundle = new Bundle();
    myExtrasBundle.putString("some_key", "some_value");
    Job myJob = dispatcher.newJobBuilder()
            .setService(jobservice.class)
            .setTag("unique-tag")
             .setExtras(myExtrasBundle)
            .build();
    dispatcher.mustSchedule(myJob);
}
//this is the JobService class
public class jobservice extends JobService{
private static final String TAG = "jobservice";
@Override
public boolean onStartJob(JobParameters job) {
    Log.d(TAG, "onStartJob: "+job.getExtras());
    return true;
}
@Override
public boolean onStopJob(JobParameters job) {
    return false;
}
}

不幸的是,JobService似乎不提供此API。您可以做两件事:

  • 使用警报管理器在需要时触发作业服务,或者
  • 频繁运行作业服务(假设每小时运行一次(。然后检查当前时间是否在您想要的时间间隔内。如果是,请继续,如果没有,请中止作业。

例如:

final Job job = dispatcher.newJobBuilder()
            .setService(MyService.class)
            .setTag(MyService.class.getName())
            .setRecurring(true)
            .setLifetime(Lifetime.FOREVER)
            .setTrigger(Trigger.executionWindow(HOUR, 2 * HOUR))
            .setReplaceCurrent(false)
            .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
            .build();

然后在您的工作服务中:

@Override
public boolean onStartJob(JobParameters job) {
    if (!nowIsInDesiredInterval()) {
        Timber.i("Now is not inside the desired interval. Aborting.");
        return false;
    }
    // else execute your job
    // .....
    return false;
}

相关内容

  • 没有找到相关文章

最新更新