我使用以下代码安排每15分钟执行一次后台作业。
WorkManager workManager = WorkManager.getInstance();
PeriodicWorkRequest ulpBackup;
ulpBackup = new PeriodicWorkRequest
.Builder(Ulp.class, 15, TimeUnit.MINUTES)
.addTag(activity.getString(R.string.job_tag))
.build();
workManager.enqueue(ulpBackup);
这是UlpBackup.class
public class UlpBackup extends Worker {
private Integer responseCounter = 0;
public UlpBackup() {}
@NonNull
@Override
public Result doWork() {
Log.d(logTag, "Starting periodic backup job";
final CountDownLatch countDownLatch = new CountDownLatch(1);
/** Read from local database and upload to firestore **/
localdb.setAPIListener(new APIListener() {
@Override
public void OnSuccess() {
responseCounter++;
if (responseCounter == 5) {
countDownLatch.countDown();
}
}
@Override
public void OnFailure() {
responseCounter++;
if (responseCounter == 5) {
countDownLatch.countDown();
}
}
});
localdb.sync();
try {
countDownLatch.await(300, TimeUnit.SECONDS);
} catch (Exception exception) {
Log.e(logTag, "Error in user list backup job " + exception.getMessage());
return Result.FAILURE;
}
Log.e(logTag, "Ulp backup completed");
return Result.SUCCESS;
}
上面的代码工作正常,并且工作大约按预期每15分钟进行一次。我唯一不了解的是,每次工作执行多次,有人可以解释为什么以及如何避免吗?
从日志中:
09-15 23:33:37.514 8190-8410: Starting periodic backup job
09-15 23:33:37.520 8190-8414: Starting periodic backup job
09-15 23:33:37.561 8190-8412: Starting periodic backup job
09-15 23:33:37.568 8190-8413: Starting periodic backup job
...
...
09-15 23:33:38.183 8190-8414: Ulp backup completed
09-15 23:33:39.164 8190-8412: Ulp backup completed
09-15 23:33:39.580 8190-8413: Ulp backup completed
09-15 23:38:37.517 8190-8410: Ulp backup completed
答案 0 :(得分:0)
您可以使用以下方法:@Echo Off
Set "DESPATH="
For %%A In (*.txt)Do (
For /F UseBackQDelims^=^ EOL^= %%B In ("%%A")Do Set /P "=%%B "<Nul
Echo()>>"%DESPATH%converted_%%A"
,并像这样实现:
enqueueUniquePeriodicWork()
请注意,第二个参数是键。枚举可以是WorkManager.getInstance().enqueueUniquePeriodicWork("YOUR_TAG", ExistingPeriodicWorkPolicy.KEEP, workRequest);
或KEEP
答案 1 :(得分:-1)
我认为我回答这个问题太迟了,您可能也已经对其进行了调整。.但是我还是想提供帮助。
我唯一不了解的是,每次作业执行多次,
can someone explain
为什么以及如何避免呢?
如果我会说:每个人都会感到震惊
哦,天哪。如果我当时正在执行任何数据库操作,它将导致
data-loss
.. !! ??
是的,它导致多次数据丢失。.
那时android和开发人员有任何解决方法吗??
是的,更喜欢使用IntentService
。
IntentService
有什么特别之处?
如果一个intentservice
已经在运行,即使它被调用过thousands
次,那么在这种情况下,所有调用也会被android和处理了queue
和one by one
,然后是one after another
,然后只有另一个等待finished
并开始执行
希望有帮助。