我想在内容提供商中安排任务:
class LogProvider : ContentProvider() {
override fun onCreate(): Boolean {
Log.i("Lagg", "Initializing LogCollection")
return try {
context?.let { LogCollectionInitializer().initializeCollector(it) }
true
} catch (e: Exception) {
false
}
}
// ...
}
初始化器计划工作:
WorkManager.getInstance()
.enqueueUniquePeriodicWork(
CleanLogDatabaseTask.DB_CLEANER_TASK_NAME,
ExistingPeriodicWorkPolicy.KEEP,
PeriodicWorkRequestBuilder<CleanLogDatabaseTask>(DB_CLEANING_INTERVAL, TimeUnit.MILLISECONDS)
.setBackoffCriteria(BackoffPolicy.LINEAR, PeriodicWorkRequest.MIN_BACKOFF_MILLIS, TimeUnit.MILLISECONDS)
.build()
)
问题是我遇到此错误:
java.lang.IllegalStateException: WorkManager is not initialized properly. The most likely cause is that you disabled WorkManagerInitializer in your manifest but forgot to call WorkManager#initialize in your Application#onCreate or a ContentProvider.
- 不,我没有禁用Workmanager Init。到底是什么引起了这个问题?
当我从内容提供商访问工人时,我的行为是否会有所不同?
众所周知,Workmanager拥有自己的内容提供商。因此,如果您将其覆盖并将其设置为更高的优先级,则将在其他提供商面前初始化。所以这里:
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
android:initOrder="11"
android:enabled="true"
android:exported="false" /> ```