AndroidX WorkManager の 2.9.0 がリリースされました。以前のバージョンからこのバージョンに上げるにはマイグレーションが必要です。
https://developer.android.com/jetpack/androidx/releases/work?hl=en#2.9.0
Configuration.Provider の実装
2.8.x 以前は次のような定義でした。
interface Provider { fun getWorkManagerConfiguration(): Configuration }
この定義が 2.9.0 では次のように変わりました。
interface Provider { val workManagerConfiguration: Configuration }
このインタフェースは Application クラスで実装せよとあるので、2.8.x 以前であれば次のような実装になるはずです。
class MyApp : Application(), Configuration.Provider { override fun getWorkManagerConfiguration(): Configuration = Configuration.Builder() .setMinimumLoggingLevel(Log.VERBOSE) // ... do your configuration customization .build() }
2.9.0 へのアップデートでは、次のように書き換わります。
class MyApp : Application(), Configuration.Provider { override val workManagerConfiguration: Configuration = Configuration.Builder() .setMinimumLoggingLevel(Log.VERBOSE) // ... do your configuration customization .build() }
HiltWorkerFactory と組み合わせる
次の記事で紹介した方法で、WorkManager と Hilt を組み合わせることができます。
Hilt は各種 Worker に依存を注入するために独自の WorkerFactory を使います。そのため、Application クラスで次のように WokerFactory を注入して Configuration に渡しているはずです(2.8.x 以前)。
class MyApp : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory override fun getWorkManagerConfiguration(): Configuration = Configuration.Builder() .setWorkerFactory(workerFactory) // ... do your configuration customization .build() }
WorkManager 2.9.0 へアップデートするとき、Hilt と組み合わせている場合は先程の書き換え方をそのまま適用すると workerFactory が注入される前に Configuration を作ってしまうためアプリがクラッシュします。
class MyApp : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory override val workManagerConfiguration: Configuration = Configuration.Builder() .setWorkerFactory(workerFactory) // ... do your configuration customization .build() }
正しく動作するよう書き換えるには次のように getter で Configuration を作成します。
class MyApp : Application(), Configuration.Provider { @Inject lateinit var workerFactory: HiltWorkerFactory override val workManagerConfiguration: Configuration get() = Configuration.Builder() .setWorkerFactory(workerFactory) // ... do your configuration customization .build() }