デフォルトでは、WorkManager はアプリの起動時に自動的に構成され、ほとんどのアプリに適した合理的なオプションが設定されます。WorkManager が作業を管理およびスケジュールする方法を詳細に制御する必要がある場合は、WorkManager を自分で初期化して、WorkManager 構成をカスタマイズできます。
オンデマンド初期化
オンデマンド初期化では、アプリが起動するたびではなく、そのコンポーネントが必要な場合にのみ WorkManager を作成できます。これにより、クリティカルなスタートアップ パスから WorkManager が除外され、アプリのスタートアップのパフォーマンスが向上します。オンデマンド初期化を使用するには、以下の手順を実施します。
デフォルトのイニシャライザを削除する
カスタム構成を設定するには、まずデフォルトのイニシャライザを削除する必要があります。そのためには、マージルール tools:node="remove"
を使用して、AndroidManifest.xml
を更新します。
WorkManager 2.6 以降、アプリの起動は WorkManager の内部で使用されています。カスタムのイニシャライザを指定するには、androidx.startup
ノードを削除する必要があります。
アプリでアプリの起動を使用しない場合は、完全に削除できます。
<!-- If you want to disable android.startup completely. -->
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
それ以外の場合は、WorkManagerInitializer
ノードのみを削除します。
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
android:exported="false"
tools:node="merge">
<!-- If you are using androidx.startup to initialize other components -->
<meta-data
android:name="androidx.work.WorkManagerInitializer"
android:value="androidx.startup"
tools:node="remove" />
</provider>
2.6 より前のバージョンの WorkManager を使用している場合は、次を削除します。
workmanager-init
:
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove" />
マニフェストにおけるマージルールの使用の詳細については、複数のマニフェスト ファイルをマージする方法のドキュメントをご覧ください。
Configuration.Provider を実装する
Application
クラスに
Configuration.Provider
API 呼び出しを作成し、独自の実装を提供します。
Configuration.Provider.getWorkManagerConfiguration
。
WorkManager を使用する必要がある場合は、必ずメソッドを呼び出して
WorkManager.getInstance(Context)
。
WorkManager はアプリのカスタム getWorkManagerConfiguration()
メソッドを呼び出して、その Configuration
を検出します(自分で WorkManager.initialize
を呼び出す必要はありません)。
カスタム getWorkManagerConfiguration()
実装の例を次に示します。
Kotlin
class MyApplication() : Application(), Configuration.Provider { override fun getWorkManagerConfiguration() = Configuration.Builder() .setMinimumLoggingLevel(android.util.Log.INFO) .build() }
Java
class MyApplication extends Application implements Configuration.Provider { @Override public Configuration getWorkManagerConfiguration() { return new Configuration.Builder() .setMinimumLoggingLevel(android.util.Log.INFO) .build(); } }
WorkManager 2.1.0 より前のカスタム初期化
バージョン 2.1.0 より前の 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()
リファレンス ドキュメントをご覧ください。