当应用程序未运行时从广播接收器启动 workManger 它工作正常,但是当内存较低时(忽略为什么它低,它只是低)工作管理器的 doWork/wholeApplication 进程现在被杀死,有什么方法可以重新启动同一个工作人员。
有些人可能会告诉返回 Result.retry();但这只有在我们返回它时才有效,但是当执行突然停止时,似乎无法返回它。
OneTimeWorkRequest workRequest =
new OneTimeWorkRequest.Builder(Worker.class)
//.setInitialDelay(15, TimeUnit.MINUTES)
//.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
.setBackoffCriteria(
BackoffPolicy.EXPONENTIAL,
5,
TimeUnit.MINUTES
)
.build();
前台服务将无法工作,因为它无法以其他方式从广播启动?
这就是我最后的做法,所以我基本上使用了定期工作管理器,它将每 15 分钟后重复执行一次,除非手动取消。
所以我所做的是,如果我的工作执行完成而没有遇到任何内存不足的问题,我最后会取消该工作。在内存不足且工作未完全执行的情况下,相同的工作管理器将在 15 分钟后重新启动。
PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(
YourWorkClass.class,
15,
TimeUnit.MINUTES)
.addTag("yourTagName")
.build();
WorkManager.getInstance(context)
.enqueueUniquePeriodicWork(
"someName",
ExistingPeriodicWorkPolicy.REPLACE,periodicWorkRequest
);
//and to stop the work
WorkManager.getInstance(getApplicationContext()).cancelAllWorkByTag("yourTagName");