Personnaliser la configuration et l'initialisation de WorkManager

Par défaut, WorkManager se configure automatiquement au démarrage de votre application à l'aide d'options raisonnables et adaptées à la plupart des applications. Si vous avez besoin d'un contrôle accru sur la manière dont WorkManager gère et planifie le travail, vous pouvez personnaliser la configuration de WorkManager en initialisant WorkManager vous-même.

Initialisation à la demande

L'initialisation à la demande vous permet de créer WorkManager uniquement lorsque ce composant est nécessaire plutôt qu'à chaque démarrage de l'application. Cela permet de retirer WorkManager du chemin critique au démarrage, ce qui améliore les performances de démarrage de l'application. Pour utiliser l'initialisation à la demande :

Supprimer l'initialiseur par défaut

Pour proposer votre propre configuration, supprimez tout d'abord l'initialiseur par défaut. Pour ce faire, mettez à jour AndroidManifest.xml à l'aide de la règle de fusion tools:node="remove".

Depuis WorkManager 2.6, le démarrage d'application est utilisé en interne dans WorkManager. Pour proposer un initialiseur personnalisé, vous devez supprimer le nœud androidx.startup.

Si vous n'utilisez pas cette fonctionnalité dans votre application, vous pouvez la supprimer complètement.

 <!-- If you want to disable android.startup completely. -->
 <provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    tools:node="remove">
 </provider>

Sinon, supprimez uniquement le nœud 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>

Si vous utilisez une version de WorkManager antérieure à la version 2.6, supprimez plutôt workmanager-init:

<provider
    android:name="androidx.work.impl.WorkManagerInitializer"
    android:authorities="${applicationId}.workmanager-init"
    tools:node="remove" />

Pour en savoir plus sur l'utilisation des règles de fusion dans votre fichier manifeste, consultez les documents concernant la fusion de plusieurs fichiers manifestes.

Intégrer Configuration.Provider

Demandez à votre classe Application d'implémenter l'interface Configuration.Provider et de fournir votre propre implémentation de Configuration.Provider.getWorkManagerConfiguration. Lorsque vous devez utiliser WorkManager, veillez à appeler la méthode WorkManager.getInstance(Context). WorkManager appelle la méthode getWorkManagerConfiguration() personnalisée de votre application pour découvrir sa Configuration. (Inutile d'appeler WorkManager.initialize vous-même.)

Exemple d'intégration getWorkManagerConfiguration() personnalisée :

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();
    }
}

Initialisation personnalisée avant WorkManager 2.1.0

Dans les versions de WorkManager antérieures à la version 2.1.0, deux options d'initialisation existent. Dans la plupart des cas, l'initialisation par défaut suffit. Pour un contrôle plus précis de WorkManager, vous pouvez préciser votre propre configuration.

Initialisation par défaut

WorkManager utilise un ContentProvider personnalisé pour s'initialiser au démarrage de votre application. Ce code se trouve dans la classe interne androidx.work.impl.WorkManagerInitializer et utilise la valeur par défaut Configuration. L'initialiseur par défaut est utilisé automatiquement, sauf si vous le désactivez explicitement. L'initialiseur par défaut convient à la plupart des applications.

Initialisation personnalisée

Si vous souhaitez contrôler le processus d'initialisation, désactivez l'initialiseur par défaut, puis définissez votre propre configuration personnalisée.

Une fois l'initialiseur par défaut supprimé, vous pouvez initialiser manuellement 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);

Assurez-vous que l'initialisation du Singleton WorkManager s'exécute dans Application.onCreate() ou dans un ContentProvider.onCreate().

Pour obtenir la liste complète des personnalisations disponibles, consultez les documents de référence sur Configuration.Builder().