Configurazione e inizializzazione personalizzate di WorkManager

Per impostazione predefinita, WorkManager si configura automaticamente all'avvio dell'app. usando opzioni ragionevoli adatte alla maggior parte delle app. Se hai bisogno di più spazio regolare il funzionamento delle pianificazioni e della gestione da parte di WorkManager, puoi della configurazione di WorkManager inizializzando WorkManager autonomamente.

Inizializzazione on demand

L'inizializzazione on demand consente di creare WorkManager solo quando tale componente è anziché a ogni avvio dell'app. Questa operazione disattiva WorkManager il tuo percorso di avvio critico, migliorando le prestazioni dell'avvio dell'app. Per utilizzare on demand Inizializzazione:

Rimuovi l'inizializzazione predefinito

Per fornire la tua configurazione, devi prima rimuovere quella predefinita come inizializzatore. Per farlo, aggiorna AndroidManifest.xml usando la regola di unione tools:node="remove".

Da WorkManager 2.6, viene utilizzata l'avvio di app all'interno di WorkManager. Per fornire un inizializzatore personalizzato, rimuovi il nodo androidx.startup.

Se non utilizzi l'opzione Avvio app nell'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 invece:

<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 su unione di più file manifest.

Implementazione del provider di configurazione

Chiedi alla tua classe Application di implementare il Configuration.Provider e fornire la tua implementazione Configuration.Provider.getWorkManagerConfiguration. Quando devi utilizzare WorkManager, assicurati di chiamare il metodo WorkManager.getInstance(Context) WorkManager chiama il metodo getWorkManagerConfiguration() personalizzato della tua app a scopri Configuration. (Non è necessario chiamare WorkManager.initialize tu stesso.

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, esistono due inizializzazione le opzioni di CPU e memoria disponibili. Nella maggior parte dei casi, inizializzazione predefinita tutto ciò di cui hai bisogno. Per un controllo più preciso di WorkManager, puoi specifica la tua configurazione.

Inizializzazione predefinita

WorkManager utilizza un ContentProvider personalizzato per inizializzarsi quando l'app . Questo codice si trova nella classe interna androidx.work.impl.WorkManagerInitializer e utilizza il valore predefinito Configuration Viene usato automaticamente l'inizializzazione predefinita, a meno che disattivarlo esplicitamente. L'inizializzatore predefinito è adatto alla maggior parte delle app.

Inizializzazione personalizzata

Se vuoi controllare il processo di inizializzazione, devi disattiva l'inizializzazione predefinita, e poi definisci la tua configurazione personalizzata.

Una volta rimosso l'inizializzazione predefinita, è possibile inizializzarla 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 WorkManager singleton viene eseguito Application.onCreate() o in un ContentProvider.onCreate()

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