我尝试使用JobScheduler和 JobService 创建定期异步任务来调用Web服务。但我的想法是每天尝试执行一次这个任务,并且总是在同一时间执行。甚至可以让用户更新任务启动日期的小时。
JobInfo.Builder 是否支持此功能?因为我正在使用" setPeriodic",但我不认为这是可行的。
我应该更好地使用 AlarmManager 来实现此功能吗?
这是现在调用服务的代码:
private void launchCheckShowStatusJob(){
ComponentName serviceComponent = new ComponentName(this, CheckShowsStatusService.class);
JobInfo.Builder builder = new JobInfo.Builder(jobId++, serviceComponent);
builder.setMinimumLatency(0);
builder.setPeriodic(5*1000); //Every 5 minutes, can this be use to set a dayly task?
builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY); //Require any network
builder.setRequiresCharging(false);
JobScheduler jobScheduler = (JobScheduler) getApplication().getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(builder.build());
}
答案 0 :(得分:0)
您可以检查作业调度程序唤醒时的设备时间,然后在OnStartJob内部获取第一个时间
public override bool OnStartJob (JobParameters args)
{ if (devicetime == (that unique time)){ ... } }
然后你就可以做任何你想做的事。
然而,android 7.0并不能保证jobscheduler会在确切的时间工作。所以选择你的独特时间更广泛。
第二个选项是Alarm Manager,它也适用于您的情况。 有用的解决方案; Using Alarmmanager to start a service at specific time