工作管理器定期请求未运行?
WorkManager periodic request not runnning?
我正在尝试 运行 每隔一小时定期 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
class 的 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()
}
但它永远不会 运行ned。我没有看到我的本地通知。我为此等了一整天。没有简单的调试方法,所以我决定将我的定期工作请求转换为一次性工作请求,并在我的 UI
中添加了一个按钮,在点击监听器的按钮上我调用了以下代码
WorkManager.getInstance(this).enqueue(request)
现在可以正确调用 api 并且当 api
成功时会显示本地通知。我不明白为什么我的定期请求不是 运行ning
所以我终于想通了
而不是使用
ExistingPeriodicWorkPolicy.KEEP
使用这个
ExistingPeriodicWorkPolicy.REPLACE
我正在尝试 运行 每隔一小时定期 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
class 的 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()
}
但它永远不会 运行ned。我没有看到我的本地通知。我为此等了一整天。没有简单的调试方法,所以我决定将我的定期工作请求转换为一次性工作请求,并在我的 UI
中添加了一个按钮,在点击监听器的按钮上我调用了以下代码
WorkManager.getInstance(this).enqueue(request)
现在可以正确调用 api 并且当 api
成功时会显示本地通知。我不明白为什么我的定期请求不是 运行ning
所以我终于想通了
而不是使用
ExistingPeriodicWorkPolicy.KEEP
使用这个
ExistingPeriodicWorkPolicy.REPLACE