gpt4 book ai didi

android - 检查 WorkRequest 之前是否已被 WorkManager Android 查询

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:55:54 24 4
gpt4 key购买 nike

我正在使用 PeriodicWorkRequest 每 15 分钟为我执行一次任务。我想检查一下,如果这个定期工作请求之前已经安排好了。如果没有,请安排。

     if (!PreviouslyScheduled) {
PeriodicWorkRequest dataupdate = new PeriodicWorkRequest.Builder( DataUpdateWorker.class , 15 , TimeUnit.MINUTES).build();
WorkManager.getInstance().enqueue(dataupdate);
}

以前在使用JobScheduler执行任务时,我曾经使用

public static boolean isJobServiceScheduled(Context context, int JOB_ID ) {
JobScheduler scheduler = (JobScheduler) context.getSystemService( Context.JOB_SCHEDULER_SERVICE ) ;

boolean hasBeenScheduled = false ;

for ( JobInfo jobInfo : scheduler.getAllPendingJobs() ) {
if ( jobInfo.getId() == JOB_ID ) {
hasBeenScheduled = true ;
break ;
}
}

return hasBeenScheduled ;
}

需要帮助构建类似的工作请求模块,以帮助找到计划/Activity 的工作请求。

最佳答案

为您的 PeriodicWorkRequest 任务设置一些标签:

    PeriodicWorkRequest work =
new PeriodicWorkRequest.Builder(DataUpdateWorker.class, 15, TimeUnit.MINUTES)
.addTag(TAG)
.build();

然后在 enqueue() 工作之前使用 TAG 检查任务:

    WorkManager wm = WorkManager.getInstance();
ListenableFuture<List<WorkStatus>> future = wm.getStatusesByTag(TAG);
List<WorkStatus> list = future.get();
// start only if no such tasks present
if((list == null) || (list.size() == 0)){
// shedule the task
wm.enqueue(work);
} else {
// this periodic task has been previously scheduled
}

但如果您真的不需要知道它是否已预先安排,您可以使用:

    static final String TASK_ID = "data_update"; // some unique string id for the task
PeriodicWorkRequest work =
new PeriodicWorkRequest.Builder(DataUpdateWorker.class,
15, TimeUnit.MINUTES)
.build();

WorkManager.getInstance().enqueueUniquePeriodicWork(TASK_ID,
ExistingPeriodicWorkPolicy.KEEP, work);

ExistingPeriodicWorkPolicy.KEEP 意味着任务只会被调度一次,然后即使在设备重启后也会定期工作。如果您需要重新安排任务(例如,如果您需要更改任务的某些参数),您将需要在此处使用 ExistingPeriodicWorkPolicy.REPLACE

关于android - 检查 WorkRequest 之前是否已被 WorkManager Android 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51401148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com