Rui*_*Rui 4 android android-workmanager
我使用此代码设置我自己的工厂工厂:
val daggerWorkerFactory = DaggerWorkerFactory(toInjectInWorker)
val configuration = Configuration.Builder()
.setWorkerFactory(daggerWorkerFactory)
.build()
WorkManager.initialize(context, configuration)
Run Code Online (Sandbox Code Playgroud)
执行此代码后,我可以获取WorkManager实例:
val workManager = WorkManager.getInstance()
Run Code Online (Sandbox Code Playgroud)
问题是,对于在此之后创建的每个工人,我的工厂从未使用过.而是使用默认工厂.
我可以在API文档中看到方法"WorkManager.initialize"有一个注释:
在清单中禁用androidx.work.impl.WorkManagerInitializer
我找不到任何有关如何执行此操作的信息.这是在一些旧版本的WorkManager上,他们忘了从文档中删除或这是否真的有必要?如果是这样,怎么样?
从文档中 WorkerManager.initialize()
默认情况下,不应调用此方法,因为它
WorkManager是自动初始化的.要初始化WorkManager自己,请按以下步骤操作:
androidx.work.impl.WorkManagerInitializer在清单中禁用在Application#onCreate或中ContentProvider,在调用之前调用此方法getInstance()
所以你需要WorkManagerInitializer在你的清单文件中禁用:
<application
//...
android:name=".MyApplication">
//...
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="your-packagename.workmanager-init"
android:enabled="false"
android:exported="false" />
</application>
Run Code Online (Sandbox Code Playgroud)
在您的自定义Application类中,初始化您的WorkerManager:
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
val daggerWorkerFactory = DaggerWorkerFactory(toInjectInWorker)
val configuration = Configuration.Builder()
.setWorkerFactory(daggerWorkerFactory)
.build()
WorkManager.initialize(context, configuration)
}
}
Run Code Online (Sandbox Code Playgroud)
注意:
默认情况下,WorkerManager将添加一个设置为权限的ContentProvider被调用WorkerManagerInitializer者my-packagename.workermanager-init.
如果您在禁用时在Manifest文件中传递错误的权限WorkerManagerInitializer,Android将无法编译您的清单.
| 归档时间: |
|
| 查看次数: |
2426 次 |
| 最近记录: |