Workmanager not working with delay in android 12 Android kotlin(WorkManager在Android 12 Android Kotlin中不能处理延迟)
问题描述
嗨,我在科特林的WorkManager工作。我不理解一些代码,因此导致了这个错误。你能找人给我解释得更详细些吗?
2022-01-06 16:48:33.501 14483-14483/com.example.app E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.app, PID: 14483
java.lang.IllegalArgumentException: Expedited jobs cannot be delayed
at androidx.work.WorkRequest$Builder.build(WorkRequest.java:326)
at com.example.app.tracker.TrackerHelper.setupNotificationWorkerForNextLaunch(TrackerHelper.kt:124)
at com.example.app.tracker.TrackerHelper.setReminderOff(TrackerHelper.kt:36)
at com.example.app.tracker.TrackerHelper.switchReminder(TrackerHelper.kt:70)
at com.example.app.tracker.TrackerSettingsViewModel.switchReminder(TrackerSettingsViewModel.kt:34)
at com.example.app.tracker.TrackerSettingsViewModel.enableReminder(TrackerSettingsViewModel.kt:100)
at com.example.app.tracker.TrackerSettingsViewModel.setupReminderRow$lambda-1(TrackerSettingsViewModel.kt:85)
at com.example.app.tracker.TrackerSettingsViewModel.lambda$5Q3PVjBphM6lb1pU0jZdN9GXKaE(Unknown Source:0)
at com.example.app.tracker.-$$Lambda$TrackerSettingsViewModel$5Q3PVjBphM6lb1pU0jZdN9GXKaE.onCheckedChanged(Unknown Source:2)
at android.widget.CompoundButton.setChecked(CompoundButton.java:222)
at androidx.appcompat.widget.SwitchCompat.setChecked(SwitchCompat.java:1095)
at androidx.appcompat.widget.SwitchCompat.toggle(SwitchCompat.java:1090)
at android.widget.CompoundButton.performClick(CompoundButton.java:144)
at android.view.View.performClickInternal(View.java:7418)
at android.view.View.access$3700(View.java:835)
at android.view.View$PerformClick.run(View.java:28676)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
我试过这个solution它可以在Android 11或更低版本下运行。在那之后,我尝试了这个mediumPOST来运行Android 12,但是我得到了上面的错误。
我尝试的代码是
AndroidManifest.xml
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:ignore="ExportedContentProvider"
tools:node="merge">
<meta-data
android:name="androidx.work.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />
</provider>
1.能不能请谁详细解释一下上面的代码在做什么?
WorkerClass.kt
class WorkerClass(appContext: Context, workerParams: WorkerParameters) : Worker(appContext, workerParams){
override fun doWork(): Result {
// calling function
return Result.success()
}
}
HelperClass.kt
fun setupNotificationWorkerForNextLaunch() {
val delayDuration = currentDate.timeInMillis
val dailyWorkRequest = OneTimeWorkRequestBuilder<WorkerClass>()
.setInitialDelay(delayDuration, TimeUnit.MILLISECONDS)
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
.addTag(REMINDER_WORK_TAG)
.build()
WorkManager.getInstance(Application.appContext).enqueue(dailyWorkRequest)
}
我从中级帖子添加了此代码
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
2.有人能解释一下如何在Android 12中实现这一点吗?我要在每天的特定时间创建通知。我如何通过WorkManager实现这一点。谢谢
推荐答案
WorkManager不保证您的工作在确切时间运行。而且大多数应用程序一开始就不需要它,除非你的应用程序是闹钟或日历应用程序。
如果您希望以大约24小时为基础定期运行某项操作,PeriodicWorkRequest
是要使用的API。
使用setExpedited
API让WorkManager知道该请求对用户可能很重要,应该尽快运行。因此,对该API的延迟进行了限制。
这篇关于WorkManager在Android 12 Android Kotlin中不能处理延迟的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:WorkManager在Android 12 Android Kotlin中不能处理延迟
基础教程推荐
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01