WorkManager のカスタム構成と初期化

デフォルトでは、WorkManager はアプリの起動時に自動的に構成され、ほとんどのアプリに適した合理的なオプションが設定されます。WorkManager が作業を管理およびスケジュールする方法を詳細に制御する必要がある場合は、WorkManager を自分で初期化して、WorkManager 構成をカスタマイズできます。

WorkManager 2.1.0 以降

WorkManager 2.1.0 以降には、WorkManager を構成する複数の方法があります。WorkManager のカスタム初期化を最も柔軟に行う方法は、WorkManager 2.1.0 以降で利用可能なオンデマンド初期化を使用することです。他の方法については、後で説明します

オンデマンド初期化

オンデマンド初期化では、アプリが起動するたびに WorkManager を作成する代わりに、そのコンポーネントが必要な場合にのみ 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 の古いバージョンには、2 つの初期化方法があります。

デフォルトの初期化
ほとんどの場合、デフォルトの初期化で十分です。
カスタム初期化
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() のリファレンス ドキュメントをご覧ください。