【发布时间】:2022-01-06 17:16:14
【问题描述】:
嘿,我在 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 或更低版本中工作。之后我尝试了这个medium 帖子来运行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 实现这一点。谢谢
【问题讨论】:
-
AndroidManifest.xml 中添加的 XML 删除了 WorkManager 的默认初始化,并允许您进行自定义初始化:developer.android.com/topic/libraries/architecture/workmanager/… 只有在您有自己的自定义初始化时才应该使用它。
-
@pfmaggi 你知道如何在 workmanager 中使用 setExpedited 并有延迟吗?
标签: android kotlin android-service android-workmanager