Android WorkManager 周期性任务在应用程序被杀死时未触发
Android WorkManager Periodic task not triggered when app is killed
我的目标是每 12 小时更新我的应用程序令牌(使用网络请求),无论应用程序是在后台还是被杀死,所以我使用 workmanager 来解决这个问题。但周期性任务仅在应用程序处于后台或打开时才有效,但当我终止应用程序时,周期性任务停止更新我的应用程序令牌。
这是我的代码:
WorkManager mWorkManager;
mWorkManager = WorkManager.getInstance(context);
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
PeriodicWorkRequest periodicSyncDataWork =
new PeriodicWorkRequest.Builder(AccessTokenUpdateWorker.class, 12, TimeUnit.HOURS)
.addTag("ACCESS_TOKEN_SYNC_DATA")
.setConstraints(constraints)
.setInitialDelay(5, TimeUnit.MINUTES)
// setting a backoff on case the work needs to retry
.setBackoffCriteria(BackoffPolicy.LINEAR, PeriodicWorkRequest.MIN_BACKOFF_MILLIS, TimeUnit.MILLISECONDS)
.build();
mWorkManager.enqueueUniquePeriodicWork(
"ACCESS_TOKEN_SYNC_DATA",
ExistingPeriodicWorkPolicy.KEEP, //Existing Periodic Work policy
periodicSyncDataWork //work request
);
我使用的是workmanager 2.4.0版本
您必须将其作为前台服务启动。
在某些情况下,有必要在清单中声明服务。
显示AccessTokenUpdateWorker.class
代码更清晰。
实际上我的 WorkManager 设置是正确的,但是 Worker class 由于上下文值而无法将令牌更新到服务器。你可以查看我的代码截图。我被分配了错误的上下文,但后来修复了它,现在代码是 运行 完美。
我遇到了同样的问题。我通过在应用程序的系统页面中将“autostart”设置为“true”并将“power saving”设置为“none”来解决这个问题。像这样尝试。
我的目标是每 12 小时更新我的应用程序令牌(使用网络请求),无论应用程序是在后台还是被杀死,所以我使用 workmanager 来解决这个问题。但周期性任务仅在应用程序处于后台或打开时才有效,但当我终止应用程序时,周期性任务停止更新我的应用程序令牌。
这是我的代码:
WorkManager mWorkManager;
mWorkManager = WorkManager.getInstance(context);
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
PeriodicWorkRequest periodicSyncDataWork =
new PeriodicWorkRequest.Builder(AccessTokenUpdateWorker.class, 12, TimeUnit.HOURS)
.addTag("ACCESS_TOKEN_SYNC_DATA")
.setConstraints(constraints)
.setInitialDelay(5, TimeUnit.MINUTES)
// setting a backoff on case the work needs to retry
.setBackoffCriteria(BackoffPolicy.LINEAR, PeriodicWorkRequest.MIN_BACKOFF_MILLIS, TimeUnit.MILLISECONDS)
.build();
mWorkManager.enqueueUniquePeriodicWork(
"ACCESS_TOKEN_SYNC_DATA",
ExistingPeriodicWorkPolicy.KEEP, //Existing Periodic Work policy
periodicSyncDataWork //work request
);
我使用的是workmanager 2.4.0版本
您必须将其作为前台服务启动。
在某些情况下,有必要在清单中声明服务。
显示AccessTokenUpdateWorker.class
代码更清晰。
实际上我的 WorkManager 设置是正确的,但是 Worker class 由于上下文值而无法将令牌更新到服务器。你可以查看我的代码截图。我被分配了错误的上下文,但后来修复了它,现在代码是 运行 完美。
我遇到了同样的问题。我通过在应用程序的系统页面中将“autostart”设置为“true”并将“power saving”设置为“none”来解决这个问题。像这样尝试。