在实际开发过程中,有可能系统已经初始化的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)