smo*_*e89 6 android android-jetpack android-workmanager
我试图通过创建一个每 5 天重复一次的定期 Worker 来使用 WorkManger。
我在华为 Android 7 设备 (API 24) 上使用 1.0.0 版 workmanagers
android.arch.work:work-runtime:1.0.0
Run Code Online (Sandbox Code Playgroud)
这是代码:
fun schedule() {
val constraints: Constraints = Constraints.Builder().apply {
setRequiredNetworkType(NetworkType.CONNECTED)
}.build()
val request = PeriodicWorkRequest
.Builder(MyWorker::class.java, 5, TimeUnit.DAYS)
.setConstraints(constraints)
.build()
WorkManager.getInstance()
.enqueueUniquePeriodicWork(MyWorker.TAG, ExistingPeriodicWorkPolicy.KEEP, request)
}
Run Code Online (Sandbox Code Playgroud)
我的工人:
class MyWorker(appContext: Context, workerParams: WorkerParameters)
: Worker(appContext, workerParams) {
override fun doWork(): Result {
return try {
Thread.sleep(5000)
Timber.i("success")
Result.success()
} catch (e: Exception) {
Timber.e(e, "error")
Result.failure()
}
}
Run Code Online (Sandbox Code Playgroud)
该方法在 MainActivity 中schedule()调用onCreate()。
当我第一次安装应用程序时,Worker 只运行一次。同样在日志中,我看到了这个错误:
CancellationException task was canceled
我究竟做错了什么?谢谢。
第一步是使用最新的 WorkManager 版本,因为您似乎仍在使用非常旧的版本:
https://developer.android.com/jetpack/androidx/releases/work
通过查看您的代码,您不太可能超出工作时间限制(大约 10 分钟)。从文档来看,作品被取消的一些原因是:
也就是说,包括华为在内的几家制造商实施了非常激进的应用程序查杀,除非应用程序最近打开过,否则它们甚至不尊重调度:
https://issuetracker.google.com/issues/122098785
https://issuetracker.google.com/issues/122098785#comment41
https://issuetracker.google.com/issues/122098785#comment74
| 归档时间: |
|
| 查看次数: |
1021 次 |
| 最近记录: |