欢迎参加我们将于 6 月 3 日举行的 #Android11:Beta 版发布会

自定义 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() 参考文档。