Inicialización y configuración personalizadas de WorkManager

De manera predeterminada, WorkManager se configura automáticamente cuando se inicia tu app, y usa opciones aceptables y adecuadas para la mayoría de las apps. Si necesitas más control de cómo WorkManager administra y programa el trabajo, puedes personalizar la configuración de WorkManager inicializando WorkManager tú mismo.

WorkManager 2.1.0 y versiones posteriores

WorkManager 2.1.0 incluye varias maneras de configurar WorkManager. El modo más flexible de proporcionar una inicialización personalizada para WorkManager es usar la inicialización on demand, que está disponible en WorkManager 2.1.0 y versiones posteriores. Las otras opciones se analizarán más adelante.

Inicialización on demand

La inicialización on demand te permite crear WorkManager solo cuando se necesita ese componente, en lugar de cada vez que se inicia la app. Si haces esto, se quita WorkManager de la ruta de inicio crítica, lo que mejora el rendimiento de inicio de la app. Para usar la inicialización on demand:

Quita el inicializador predeterminado

Si quieres proporcionar tu propia configuración, primero debes quitar el inicializador predeterminado. Para hacerlo, actualiza AndroidManifest.xml usando la regla de fusión tools:node="remove":

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

Si deseas obtener más información sobre cómo usar las reglas de fusión en tu manifiesto, consulta la documentación sobre cómo fusionar varios archivos de manifiesto.

Implementa Configuration.Provider

Haz que tu clase Application implemente la interfaz Configuration.Provider y proporciona tu propia implementación de Configuration.Provider.getWorkManagerConfiguration().

Cuando debas usar WorkManager, asegúrate de llamar al método WorkManager.getInstance(Context). WorkManager llama al método getWorkManagerConfiguration() personalizado de tu app para descubrir su Configuration. (No necesitas llamar a WorkManager.initialize() por tu cuenta).

El siguiente es un ejemplo de una implementación de getWorkManagerConfiguration() personalizada:

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 y versiones anteriores

En las versiones anteriores de WorkManager, hay dos opciones de inicialización:

Inicialización predeterminada
En la mayoría de los casos, solo necesitas la inicialización predeterminada.
Inicialización personalizada
Para obtener un control más preciso de WorkManager, puedes especificar tu propia configuración.

Inicialización predeterminada

WorkManager usa un ContentProvider personalizado para inicializarse cuando se inicia tu app. Este código está en la clase interna androidx.work.impl.WorkManagerInitializer y usa la Configuration predeterminada. Se usa automáticamente el inicializador predeterminado, a menos que lo inhabilites de manera explícita. El inicializador predeterminado es adecuado para la mayoría de las apps.

Inicialización personalizada

Si deseas controlar el proceso de inicialización, debes inhabilitar el inicializador predeterminado y, luego, definir tu propia configuración personalizada.

Una vez que quites el inicializador predeterminado, puedes iniciar WorkManager de forma manual:

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

el singleton WorkManager. Asegúrate de que la inicialización se ejecute en Application.onCreate() o en un ContentProvider.onCreate().

Para obtener la lista completa de personalizaciones disponibles, consulta la documentación de referencia de Configuration.Builder().