android - java.lang.IllegalStateException: WorkManager 已经初始化。即使工作管理器未初始化
问题描述
我正在尝试进行自定义工作管理器初始化。我不希望工作经理一开始就被初始化,我只想在登录成功时才初始化。但即使工作管理器未初始化,我总是会收到以下异常:
java.lang.IllegalStateException: WorkManager is already initialized. Did you try to initialize it manually without disabling WorkManagerInitializer? See WorkManager#initialize(Context, Configuration) or the class level Javadoc for more information.
下面是我的清单文件,我禁用了工作管理器的默认初始化:
<provider
tools:node="remove"
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
android:exported="false"
android:enabled="false"/>
下面是我的应用程序类,我已经实现了 Configuration.Provider:
open class MyApplication : Application(), Configuration.Provider {
override fun onCreate() {
super.onCreate()
daggerComponent = DaggerApplicationComponent.builder().application(this).build()
}
override fun getWorkManagerConfiguration(): Configuration {
val factory: AppWorkerFactory = daggerComponent?.factory()!!
return Configuration.Builder()
.setMinimumLoggingLevel(android.util.Log.INFO)
.setExecutor(appExecutors.upload).setWorkerFactory(factory)
.build()
}
}
如果登录成功,我正在尝试在 LoginFragment 中初始化工作管理器,如下所示:
WorkManager.initialize(activity?.application as MyApplication, (activity?.application as MyApplication).workManagerConfiguration)
请让我知道我缺少什么以及为什么我无法在登录片段中初始化工作管理器,我还没有在任何其他地方初始化工作管理器,但为什么我仍然得到工作管理器已经初始化的异常?
解决方案
如果您通过让应用程序实现和覆盖来实现按需初始化,那么您不需要手动调用- 这正是按需初始化正在为您做的事情。Configuration.Provider
getWorkManagerConfiguration()
initialize
推荐阅读
- javascript - 在浏览器中存储文件的标准方法是什么(沙盒到您的域)?
- sql - 包含 TOP 1 的 SQL 命令具有无限的加载时间
- shell - 如何使这个循环递归?
- reactjs - 在将 JSX 文件处理到 babel watch-task 之前连接它们
- java - Java argparse4j 如何验证参数
- swift - SwiftUI - @AppStorage 变量键值
- docker - phpmyadmin:fpm-alpine Docker 图像渲染问题与 Nginx 和 Docker-Compose
- amazon-web-services - 如何在亚马逊连接中将 lex 插槽设置为联系人属性?
- sql-server - 更新第二张表时,一张表可以拥有排他锁吗?
- html - 使用带有断字的省略号时文本跨度上的空白空格