默认情况下,当您的应用启动时,WorkManager 使用适合大多数应用的合理选项自动进行配置。如果您需要进一步控制 WorkManager 管理和调度工作的方式,可以通过自行初始化 WorkManager 来自定义 WorkManager 配置。
按需初始化
通过按需初始化,您可以仅在需要 WorkManager 时创建该组件,而不必每次应用启动时都创建。这样做可将 WorkManager 从关键启动路径中移出,从而提高应用启动性能。如需使用按需初始化,请执行以下操作:
移除默认初始化程序
如需提供自己的配置,必须先移除默认初始化程序。为此,请使用合并规则 tools:node="remove"
更新 AndroidManifest.xml
。
从 WorkManager 2.6 开始,应用启动功能便已在 WorkManager 内部使用。如需提供自定义初始化程序,您需要移除 androidx.startup
节点。
如果您不在应用中使用应用启动功能,则可以将其彻底移除。
<!-- If you want to disable android.startup completely. -->
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
否则,仅移除 WorkManagerInitializer
节点即可。
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<!-- If you are using androidx.startup to initialize other components -->
<meta-data
android:name="androidx.work.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />
</provider>
如果使用的是 2.6 之前的 WorkManager 版本,请移除
workmanager-init
:
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove" />
如需详细了解如何在清单中使用合并规则,请参阅有关合并多个清单文件的文档。
实现 Configuration.Provider
让您的 Application
类实现
Configuration.Provider
接口,并提供您自己的
Configuration.Provider.getWorkManagerConfiguration
。
当您需要使用 WorkManager 时,请务必调用
WorkManager.getInstance(Context)
。
WorkManager 会调用应用的自定义 getWorkManagerConfiguration()
方法来发现其 Configuration
。(您无需自行调用 WorkManager.initialize
。)
以下示例展示了自定义 getWorkManagerConfiguration()
实现:
Kotlin
class MyApplication() : Application(), Configuration.Provider { override fun getWorkManagerConfiguration() = Configuration.Builder() .setMinimumLoggingLevel(android.util.Log.INFO) .build() }
Java
class MyApplication extends Application implements Configuration.Provider { @Override public Configuration getWorkManagerConfiguration() { return new Configuration.Builder() .setMinimumLoggingLevel(android.util.Log.INFO) .build(); } }
WorkManager 2.1.0 之前版本的自定义初始化
对于 WorkManager 2.1.0 之前的版本,有两个初始化选项。在大多数情况下,默认初始化就足够了。如需更精确地控制 WorkManager,可以指定您自己的配置。
默认初始化
在您的应用启动时,WorkManager 会使用自定义 ContentProvider
自行初始化。此代码位于内部类 androidx.work.impl.WorkManagerInitializer
中,并使用默认 Configuration
。自动使用默认初始化程序(除非明确停用它)。默认初始化程序适合大多数应用。
自定义初始化
如果您想控制初始化过程,就必须停用默认初始化程序,然后定义您自己的自定义配置。
移除默认初始化程序后,可以手动初始化 WorkManager:
Kotlin
// provide custom configuration val myConfig = Configuration.Builder() .setMinimumLoggingLevel(android.util.Log.INFO) .build() // initialize WorkManager WorkManager.initialize(this, myConfig)
Java
// provide custom configuration Configuration myConfig = new Configuration.Builder() .setMinimumLoggingLevel(android.util.Log.INFO) .build(); //initialize WorkManager WorkManager.initialize(this, myConfig);
确保 WorkManager
单例的初始化是在 Application.onCreate()
或 ContentProvider.onCreate()
中运行。
如需查看可用自定义的完整列表,请参阅 Configuration.Builder()
参考文档。