Benutzerdefinierte WorkManager-Konfiguration und Initialisierung

Standardmäßig konfiguriert sich WorkManager automatisch beim Start Ihrer App und verwendet vernünftige Optionen, die für die meisten Anwendungen geeignet sind. Wenn Sie mehr Kontrolle darüber benötigen, wie WorkManager die Arbeit verwaltet und plant, können Sie die WorkManager-Konfiguration anpassen, indem Sie WorkManager selbst initialisieren.

On-Demand-Initialisierung

Bei der On-Demand-Initialisierung können Sie WorkManager nur dann erstellen, wenn diese Komponente benötigt wird, und nicht bei jedem Start der Anwendung. Dadurch wird WorkManager von Ihrem kritischen Startpfad weggeleitet und so die App-Startleistung verbessert. So verwenden Sie die On-Demand-Initialisierung:

Standardinitialisierer entfernen

Wenn Sie Ihre eigene Konfiguration bereitstellen möchten, müssen Sie zuerst den Standardinitialisierer entfernen. Aktualisieren Sie dazu AndroidManifest.xml mit der Zusammenführungsregel tools:node="remove".

Seit WorkManager 2.6 wird App Startup intern innerhalb von WorkManager verwendet. Um einen benutzerdefinierten Initialisierer bereitzustellen, müssen Sie den androidx.startup-Knoten entfernen.

Wenn Sie die Funktion „App-Start-Anzeige“ nicht in Ihrer App verwenden, können Sie sie vollständig entfernen.

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

Entfernen Sie andernfalls nur den Knoten 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>

Wenn Sie eine ältere Version von WorkManager als 2.6 verwenden, entfernen Sie stattdessen workmanager-init:

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

Weitere Informationen zur Verwendung von Zusammenführungsregeln in Ihrem Manifest finden Sie in der Dokumentation zum Zusammenführen mehrerer Manifestdateien.

Configuration.Provider implementieren

Lassen Sie die Application-Klasse die Configuration.Provider-Schnittstelle implementieren und geben Sie Ihre eigene Implementierung von Configuration.Provider.getWorkManagerConfiguration an. Wenn Sie WorkManager verwenden müssen, müssen Sie die Methode WorkManager.getInstance(Context) aufrufen. WorkManager ruft die benutzerdefinierte getWorkManagerConfiguration()-Methode Ihrer App auf, um die Configuration zu ermitteln. (Sie müssen WorkManager.initialize nicht selbst aufrufen.)

Hier ein Beispiel für eine benutzerdefinierte getWorkManagerConfiguration()-Implementierung:

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

Benutzerdefinierte Initialisierung vor WorkManager 2.1.0

Für WorkManager-Versionen vor Version 2.1.0 gibt es zwei Initialisierungsoptionen. In den meisten Fällen reicht die Standardinitialisierung aus. Wenn Sie WorkManager noch genauer steuern möchten, können Sie Ihre eigene Konfiguration angeben.

Standardinitialisierung

WorkManager verwendet eine benutzerdefinierte ContentProvider, um sich beim Start Ihrer App zu initialisieren. Dieser Code befindet sich in der internen Klasse androidx.work.impl.WorkManagerInitializer und verwendet den Standardwert Configuration. Der Standardinitialisierer wird automatisch verwendet, sofern Sie ihn nicht explizit deaktivieren. Der Standardinitialisierer ist für die meisten Apps geeignet.

Benutzerdefinierte Initialisierung

Wenn Sie den Initialisierungsprozess steuern möchten, müssen Sie den Standardinitialisierer deaktivieren und dann Ihre eigene benutzerdefinierte Konfiguration definieren.

Nachdem der Standardinitialisierer entfernt wurde, können Sie WorkManager manuell initialisieren:

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

Prüfen Sie, ob die Initialisierung des Singleton-Elements WorkManager entweder in Application.onCreate() oder in einem ContentProvider.onCreate() ausgeführt wird.

Eine vollständige Liste der verfügbaren Anpassungen finden Sie in der Referenzdokumentation zu Configuration.Builder().