android - WorkManager 未初始化异常,即使 WorkManagerInitializer 未在清单中禁用
问题描述
WorkManager
我有一个用于多个后台任务的应用程序。最近我在生产日志中看到很多崩溃,因为 WM 没有被初始化,即使我没有WorkManagerInitializer
在清单中禁用。
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.
at androidx.work.WorkManager.getInstance(WorkManager:161)
...
WM 文档说
默认情况下,WorkManager 使用内置的 ContentProvider 自动初始化自身。ContentProviders 在 Application 对象之前创建和运行,因此在大多数情况下,这允许在您的代码运行之前设置 WorkManager 单例。
在大多数情况下,有趣的部分是。我想知道在什么情况下它在应用程序启动之前没有正确初始化。
我最初的猜测是我的代码中的一个错误可能创建了太多的 WM 任务,这些任务需要很长时间才能初始化,但我无法以这种方式重新创建崩溃。
任何人以前都见过这种行为并且知道这里会发生什么?为什么WorkManager
在应用程序启动之前没有初始化?
解决方案
在清单文件中添加以下代码
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
android:exported="false"
tools:node="remove" />
推荐阅读
- c++ - `decltype(&ordenary_func)` 和 decltype`(ordenary_func)` 的区别
- mysql - Navicat 无法识别 Mac 上 known_hosts 文件中的新条目并且无法连接到远程服务器
- logstash-grok - 如何从字符串中提取关键字值
- angular - 多个 HTML 页面合并为一个页面
- r - 在 R 中对多个数据帧进行汇总统计
- oracle - Oracle Apex 在应用程序中一次导入多个导出的文件
- reactjs - mobx 操作绑定和状态更改的问题
- c++ - 我如何知道字符串中字符相对于英文字母的位置值?
- node.js - 收到错误 DeprecationWarning:不推荐使用未处理的承诺拒绝。在节点 js
- reactjs - 如何将服务器端功能添加到已经创建的 React 应用程序中?