我正在使用workmanager为后台任务实现一个类。任务是周期性的,所以我使用PeriodicWorkRequest,但任务不执行或执行一次。上课了,怎么了?
public class PollingWorker extends Worker {
private final static String DELAY_KEY = "initialDelayDuration";
private final static String TAG_POLLING_WORK_KEY = "background_polling_tag";
private final static int DEFAULT_DELAY = 20000;
public PollingWorker(
@Nonnull Context ctx,
@Nonnull WorkerParameters params) {
super(ctx, params);
}
@NonNull
@Override
public Result doWork() {
try{
Log.d("TEST","sending work");
return Result.success();
}catch (Throwable throwable) {
Log.e("TEST", "Error applying blur", throwable);
return Result.failure();
}
}
public static void startPollingWorker(
@Nonnull Context context,
final long interval,
final String pollingWorkerTag
) {
Log.d("TEST","interval:"+interval);
Log.d("TEST","pollingWorkerTag:"+pollingWorkerTag);
PeriodicWorkRequest pollingWorkerRequest =
new PeriodicWorkRequest.Builder(PollingWorker.class,interval,TimeUnit.SECONDS)
.addTag(pollingWorkerTag)
.build();
Operation operationResult=WorkManager.getInstance(context).enqueueUniquePeriodicWork(pollingWorkerTag,ExistingPeriodicWorkPolicy.KEEP,pollingWorkerRequest);
Log.d("TEST","operation result:"+operationResult.getResult().isDone());
Log.d("TEST","operation result:"+operationResult.getResult().isCancelled());
}
}
此日志包括:
2条答案
按热度按时间suzh9iv81#
尝试更换工作经理,而不是保留现有的工作经理。
bt1cpqcv2#
期刊工作者没有成功或失败的状态。你的worker实际上正在运行,所以你的代码
永远不会成为现实
在日志中,您应该找到
Worker result SUCCESS for Work
,这意味着工作进程正在运行,但您无法通过operationResult.getResult().isDone()
获得成功状态,因为定期工作进程的状态将被排队等待下一次。您可以使用
getWorkInfoByIdLiveData(workerId)
观察工作。如下:使用
UUID workerId = pollingWorkerRequest.getId();
获取ID然后你会发现你的工人的变化状态。跑步,询问