Configurazione e inizializzazione personalizzate di WorkManager

Per impostazione predefinita, WorkManager si configura automaticamente all'avvio dell'app, utilizzando opzioni ragionevoli e adatte alla maggior parte delle app. Se hai bisogno di un maggiore controllo sul funzionamento di WorkManager e di gestione e pianificazione, puoi personalizzare la relativa configurazione inizializzando WorkManager.

Inizializzazione on demand

L'inizializzazione on demand consente di creare WorkManager solo quando è necessario tale componente, anziché a ogni avvio dell'app. In questo modo, WorkManager viene allontanato dal percorso di avvio critico, migliorando le prestazioni di avvio dell'app. Per utilizzare l'inizializzazione on demand:

Rimuovi l'inizializzazione predefinita

Per fornire la tua configurazione, devi prima rimuovere l'inizializzazione predefinita. Per farlo, aggiorna AndroidManifest.xml utilizzando la regola di unione tools:node="remove".

A partire da WorkManager 2.6, Avvio app viene utilizzato internamente in WorkManager. Per fornire un inizializzatore personalizzato, devi rimuovere il nodo androidx.startup.

Se non utilizzi Avvio app nella tua app, puoi rimuoverla completamente.

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

In caso contrario, rimuovi solo il 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>

Se utilizzi una versione di WorkManager precedente alla 2.6, rimuovi workmanager-init:

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

Per ulteriori informazioni sull'utilizzo delle regole di unione nel file manifest, consulta la documentazione sull'unione di più file manifest.

Implementa Configuration.Provider

Chiedi alla tua classe Application di implementare l'interfaccia Configuration.Provider e di fornire la tua implementazione di Configuration.Provider.getWorkManagerConfiguration. Quando devi utilizzare WorkManager, assicurati di chiamare il metodo WorkManager.getInstance(Context). WorkManager chiama il metodo getWorkManagerConfiguration() personalizzato dell'app per scoprire il relativo Configuration. (Non è necessario chiamare personalmente WorkManager.initialize).

Di seguito è riportato un esempio di implementazione personalizzata di 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();
    }
}

Inizializzazione personalizzata prima di WorkManager 2.1.0

Per le versioni di WorkManager precedenti alla 2.1.0, sono disponibili due opzioni di inizializzazione. Nella maggior parte dei casi, è sufficiente l'inizializzazione predefinita. Per un controllo più preciso di WorkManager, puoi specificare la tua configurazione.

Inizializzazione predefinita

WorkManager utilizza un ContentProvider personalizzato per inizializzarsi all'avvio dell'app. Questo codice si trova nella classe interna androidx.work.impl.WorkManagerInitializer e utilizza il valore predefinito Configuration. L'inizializzazione predefinita viene utilizzato automaticamente, a meno che non venga disabilitato esplicitamente. L'inizializzazione predefinita è adatto alla maggior parte delle app.

Inizializzazione personalizzata

Se vuoi controllare il processo di inizializzazione, devi disabilitare l'inizializzazione predefinita, quindi definire la tua configurazione personalizzata.

Dopo aver rimosso l'inizializzazione predefinita, puoi inizializzare manualmente 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);

Assicurati che l'inizializzazione del singleton WorkManager venga eseguita in Application.onCreate() o in un ContentProvider.onCreate().

Per l'elenco completo delle personalizzazioni disponibili, consulta la documentazione di riferimento di Configuration.Builder().