自定义 WorkManager 配置和初始化

默认情况下,当您的应用启动时,WorkManager 使用适合大多数应用的合理选项自动进行配置。如果您需要进一步控制 WorkManager 管理和调度工作的方式,可以通过自己初始化 WorkManager 自定义 WorkManager 配置。

WorkManager 2.1.0 及更高版本

WorkManager 2.1.0 有多种配置 WorkManager 的方式。为 WorkManager 提供自定义初始化的最灵活方式是使用 WorkManager 2.1.0 及更高版本中提供的按需初始化。其他选项稍后讨论

按需初始化

通过按需初始化,您可以仅在需要 WorkManager 时创建该组件,而不必每次应用启动时都创建。这样做可将 WorkManager 从关键启动路径中移出,从而提高应用启动性能。要使用按需初始化,请执行以下操作:

移除默认初始化程序

要提供自己的配置,必须先移除默认初始化程序。为此,请使用合并规则 tools:node="remove" 更新 AndroidManifest.xml

<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 getWorkManagerConfiguration() =
               Configuration.Builder()
                    .setMinimumLoggingLevel(android.util.Log.INFO)
                    .build()
    }
    

Java

    class MyApplication extends Application implements Configuration.Provider {
        @Override
        public Configuration getWorkManagerConfiguration() {
            return Configuration.Builder()
                    .setMinimumLoggingLevel(android.util.Log.INFO)
                    .build();
        }
    }
    

WorkManager 2.0.1 及更早版本

对于较早版本的 WorkManager,有两个初始化选项:

默认初始化
在大多数情况下,默认初始化就足够了。
自定义初始化
要更精确地控制 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() 参考文档。