我正在使用Job Scheduler进行Android通知。我的代码工作正常。但是有时候我有两次通知。但是我给出了运行服务的一分钟间隔。 我将如何正确执行该服务?
这是我的Job Scheduler代码以开始服务,而我仅使用服务。
JobScheduler jobScheduler =(JobScheduler)getSystemService(Context.JOB_SCHEDULER_SERVICE); ComponentName componentName =新的ComponentName(getApplicationContext(),NotifyService.class);
JobInfo jobInfo = new JobInfo.Builder(15,componentName)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
.setPeriodic(60000)
.setPersisted(true)
.build();
jobScheduler.schedule(jobInfo);
答案 0 :(得分:0)
这可能是一个较晚的帖子,但是您可以在Android中使用WorkManager设置“定期工作请求”。
我一直在使用WorkManager,它似乎工作可靠。
您可以阅读更多有关其他工作原语的信息,以适合您的任务here,但是以下实现在WorkManager中使用Worker进行线程化,该线程在后台线程上同步执行工作。
public class BackgroundWorker extends Worker {
public BackgroundWorker
(@NonNull Context context,
@NonNull WorkerParameters params) {
super(context, params);
}
@NonNull
@Override
public Worker.Result doWork() {
yourBackgroundTask(); // yourBackgroundTask() implementation
return Result.success();
}
public static void schedulePeriodicWork(Data data) {
// When multiple constraints are specified like below,
// your task will run only when all the constraints are met.
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresBatteryNotLow(true)
.setRequiresCharging(true)
.build();
PeriodicWorkRequest taskWork = new PeriodicWorkRequest.Builder(BackgroundWorker.class, 60,
TimeUnit.MINUTES)
.setConstraints(constraints)
.setInputData(data)
.build();
WorkManager.getInstance().enqueue(taskWork);
}
}
稍后在onCreate()
内的MainActivity文件中:
Data data = workData();
BackgroundWorker.schedulePeriodicWork(data);
然后在onCreate()
方法之外,
private Data workData() {
return new Data.Builder() // to build Data objects
.build();
}
需要注意的一点是,尽管我们将上述任务设置为每60分钟执行一次,但每次迭代可能不会在相同的时间间隔执行。
根据Android文档,WorkManager用于可推迟的工作,并且必须容忍一些漂移。但是,您可以在日志控制台中查看更新“ WM-WorkerWrapper: Worker result SUCCESS for Work
”。
希望这会有所帮助。