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 sobre cómo WorkManager administra y programa el trabajo, puedes personalizar la configuración de WorkManager inicializando WorkManager por tu cuenta.

El modo más flexible de proporcionar una inicialización personalizada para WorkManager es usar la inicialización a pedido, que está disponible en WorkManager 2.1.0 y versiones posteriores. Las otras opciones se analizan más adelante.

Inicialización a pedido

La inicialización a pedido 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 a pedido, haz lo siguiente:

Quita el inicializador predeterminado

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

A partir de WorkManager 2.6, el App Startup se usa internamente en WorkManager. Para proporcionar un inicializador personalizado, debes quitar el nodo androidx.startup.

Si no usas App Startup en tu app, puedes quitarla por completo.

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

De lo contrario, quita solo el nodo 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 usas una versión de WorkManager anterior a la 2.6, quita workmanager-init en su lugar:

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

Si deseas obtener más información acerca del uso de las reglas de combinación en tu manifiesto, consulta la documentación para combinar varios archivos de manifiesto.

Implementa Configuration.Provider

Haz que tu clase Application implemente la interfaz Configuration.Provider y realiza tu propia implementación de Configuration.Provider.getWorkManagerConfiguration(). Cuando necesites usar WorkManager, asegúrate de llamar al método WorkManager.getInstance(Context). WorkManager llama al método getWorkManagerConfiguration() personalizado de tu app para descubrir la Configuration. (No es necesario que llames a WorkManager.initialize()).

Este es un ejemplo de una implementación personalizada de 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();
    }
}

Inicialización personalizada antes de WorkManager 2.1.0

Existen dos opciones de inicialización para las versiones de WorkManager anteriores a la versión 2.1.0. En la mayoría de los casos, solo necesitas la inicialización predeterminada. 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 la app. Este código se encuentra en la clase interna androidx.work.impl.WorkManagerInitializer y usa el Configuration predeterminado. Se usará 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);

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

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