WorkManager : 自定义WorkManager

985 阅读1分钟

在实际开发过程中,有可能系统已经初始化的WorkManager不能满足我们的条件,我们需要自定义WorkManager。

下面的代码示例都是基于WorkManager 2.5.0.

移除默认初始化程序

如需提供自己的配置,必须先移除默认初始化程序。为此,请使用合并规则 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() 实现:

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

WorkManager.initialize(@NonNull Context context, @NonNull Configuration configuration)

除了上面介绍的在Application中实现Configuration.Provider之外,我们也可以在WorkManager初始化的时候,传入Configuration,来自定义WorkManager。

        Configuration configuration = new Configuration.Builder()
                .setExecutor(Executors.newFixedThreadPool(8))
                .setMinimumLoggingLevel(Log.WARN)
                .build();
        
        WorkManager.initialize(
                MainActivity.this, configuration
                );
        WorkManager workManager = WorkManager.getInstance(MainActivity.this);

参考文献:

工作器中的线程处理  |  Android 开发者  |  Android Developers (google.cn)

自定义 WorkManager 配置和初始化  |  Android 开发者  |  Android Developers (google.cn)