【发布时间】:2020-10-28 07:58:38
【问题描述】:
我的目标是每 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 版本
【问题讨论】:
-
“当我杀死应用程序时”是什么意思?如果您从 Android Studio 启动应用程序,它的行为与正常启动不同:developer.android.com/studio/known-issues?hl=ro#ki-force-stop 如果您的应用程序被“强制停止”,操作系统会删除所有计划的作业和警报,并且您的周期性工作人员将不会重新安排,直到用户手动打开应用程序。
-
我的意思是应用程序被从最近的应用程序列表中向右滑动杀死。
-
您在哪个设备上看到了这种行为?有些设备将从最近的应用列表中删除应用解释为强制停止:dontkillmyapp.com
-
我正在测试三星 Galaxy M40,但也测试了小米设备,但结果相同。
-
从最近的应用列表中刷出应用后,您应该可以检查作业是否仍在计划中:developer.android.com/topic/libraries/architecture/workmanager/… 您还可以修改 WorkManager 的默认日志记录:codelabs.developers.google.com/codelabs/… 另外你能在模拟器中检查应用程序的行为吗?
标签: android android-workmanager periodic-task