android - 如何清除 Android WorkManager 中查看的 WorkInfo?
问题描述
在使用WorkManager时,遇到了操作状态没有被读取字段删除的问题。
下面是初始化操作
private fun saveCashCommandSchedule() {
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
val work = OneTimeWorkRequestBuilder<WorkSynchronizeCashSchedule>()
.setConstraints(constraints)
.build()
WorkManager.getInstance().enqueueUniqueWork("send_cash_schedule",
ExistingWorkPolicy.REPLACE, work)
}
这里我连接监听器来跟踪操作的状态
fun subscribeWorkScheduleCash(lifecycle: Lifecycle) {
WorkManager.getInstance().getWorkInfosForUniqueWorkLiveData("send_cash_schedule").observe({
lifecycle
}, { states ->
states?.forEach {
if (it != null && it.state == WorkInfo.State.SUCCEEDED) {
//TODO вот этой строки хотелось бы избежать
// WorkManager.getInstance().pruneWork()
loadData()
return@observe
}
}
})
}
每次连接监听器时,都会弹出旧状态。我需要以某种方式删除它。使用 WorkManager.getInstance().pruneWork() 不是一个选项,因为它会删除所有已完成工作的操作的所有状态。
请告诉我,如何删除状态。
解决方案
您无需删除或修剪从 workmanager 收到的工作信息数据,因为WorkManager
会在一段时间后自动修剪其工作。
该pruneWork
方法的 JavaDoc 中提到了这一点:
/**
* Cancels all unfinished work. <b>Use this method with extreme caution!</b> By invoking it,
* you will potentially affect other modules or libraries in your codebase. It is strongly
* recommended that you use one of the other cancellation methods at your disposal.
* <p>
* Upon cancellation, {@link ListenableWorker#onStopped()} will be invoked for any affected
* workers.
*
* @return An {@link Operation} that can be used to determine when the cancelAllWork has
* completed
*/
public abstract @NonNull Operation cancelAllWork();
同时,您可以为您想要观察或获取工作信息的工作请求标签保留一个数据库或将标签存储在数据存储(或 sharedpref)中,并且只观察那些并忽略休息。
推荐阅读
- amazon-web-services - Pyspark:没有合适的驱动程序
- python - 在 R 或 Python 中建立网络连接
- pandas - 熊猫加速 groupby 在几列上聚合
- azure - 如何在 KQL 中使用通配符 (*) 作为连接参数?
- spring-boot - io.github.resilience4j 版本 1.7.2 的问题(不存在的 SpelResolverConfigurationOnMissingBean.spelResolver() 方法)
- python - 当数组的最后一维为 1 时,矩阵乘法的转置属性不完全相等
- oracle - 在 where 子句中使用 RowNum 时如何以正确的顺序获取行
- flutter - Flutter 谷歌地图小部件抛出错误
- kubernetes - 聚合 2 个 PromQL 量规指标,而不包括来自右操作数的额外标签
- c++ - C ++:相同命名空间中类名的标识符未定义