android - WorkManager 定期请求未运行?
问题描述
我正在尝试每隔一小时定期运行一次 api 调用。我知道定期请求的最小时间间隔是 15 分钟,我肯定保留了更多。
下面是我运行定期请求的代码
val data = Data.Builder().putString(
"covid_country",
viewModel?.getSavedCountry()
).build()
val request =
PeriodicWorkRequest.Builder(CovidWorker::class.java, 1, TimeUnit.HOURS)
.setInputData(data)
.setConstraints(
Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
)
.build()
WorkManager.getInstance(this)
.enqueueUniquePeriodicWork("simplified", ExistingPeriodicWorkPolicy.KEEP, request)
在workmanager
类的doWork
方法中,我只是调用 api 并在成功时发送本地通知。
override fun doWork(): Result {
val covidCountry = inputData.getString("covid_country")
Log.i("savedd112", covidCountry)
Coroutines.main {
val response =
CovidApi().getCovidCases("india")
val count = response?.get(response.size - 1)?.Cases ?: 0
Log.i("hereeached", "mark")
displayNotification("Cases in india", "$count")
}
return Result.retry()
}
但它永远不会运行。我没有看到我的本地通知。我等了一整天。没有简单的方法来调试这个,所以我决定将我的定期工作请求转换为一次性工作请求,并在我的UI
和点击监听器上的按钮上添加了一个按钮,我调用了以下代码
WorkManager.getInstance(this).enqueue(request)
现在 api 被正确调用,api
成功时显示本地通知。我不明白为什么我的定期请求没有运行
解决方案
所以我终于想通了
而不是使用
ExistingPeriodicWorkPolicy.KEEP
用这个
ExistingPeriodicWorkPolicy.REPLACE
推荐阅读
- vuetify.js - Nuxt Vuetify 模块 - 自定义组件图标不起作用
- html - 如何使用漂亮的汤在 html 中读取具有双类的表格
- ios - 获取最接近的 CGFloat 值
- windows - Get-appxpackage:在模块“Appx”中找到“Get-appxpackage”命令,但无法加载该模块
- powerbi - Power BI - 不同类别的 rankx
- javascript - Vue Js 中的 V-loop 传递数据
- javascript - 前缀符号的简化
- raku - 开始块中的 Raku shell 功能不会结束
- reactjs - 如何重构这个 SVG 动画以在 React 中工作?
- python - Django:查询父级时在 HTML 模板中显示子级计数