默认情况下,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>
在使用 WorkManager 的版本早于 2.6 时,请删除 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()
参考文档。