如何解决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()
来实现 On Demand Initialization,那么您不需要手动调用 initialize
- 这正是按需初始化为您所做的。
您可以在 context.applicationContext
中使用 ContentProvider
来获取 Application
类
class WorkManagerInit : ContentProvider {
override fun onCreate() : Boolean{
context?.let {
val myApp = context.applicationContext as MyApplication
WorkManager.initialize(myApp,myApp.getWorkManagerConfiguration())
}
return true
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。