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版本

您必须将其作为前台服务启动。

一切都在这里解释: https://developer.android.com/topic/libraries/architecture/workmanager/advanced/long-running#foreground-service-type

在某些情况下,有必要在清单中声明服务。

显示AccessTokenUpdateWorker.class代码更清晰。

实际上我的 WorkManager 设置是正确的,但是 Worker class 由于上下文值而无法将令牌更新到服务器。你可以查看我的代码截图。我被分配了错误的上下文,但后来修复了它,现在代码是 运行 完美。

我遇到了同样的问题。我通过在应用程序的系统页面中将“autostart”设置为“true”并将“power saving”设置为“none”来解决这个问题。像这样尝试。