Benutzerdefinierte WorkManager-Konfiguration und Initialisierung

WorkManager konfiguriert sich standardmäßig automatisch beim Start Ihrer App. mit angemessenen Optionen, die sich für die meisten Apps eignen. Wenn Sie mehr wie WorkManager seine Arbeit verwaltet und plant, können Sie die WorkManager konfigurieren, indem Sie WorkManager selbst initialisieren.

On-Demand-Initialisierung

Bei der On-Demand-Initialisierung können Sie WorkManager nur erstellen, wenn diese Komponente nicht bei jedem App-Start. Dadurch wird WorkManager deaktiviert kritischer Start-up-Pfad und verbessert die Startleistung von Apps. So nutzen Sie On-Demand Initialisierung:

Standardinitialisierer entfernen

Wenn Sie Ihre eigene Konfiguration angeben möchten, müssen Sie zuerst die Standardeinstellung entfernen Initialisieren. Aktualisieren Sie dazu AndroidManifest.xml mithilfe der Zusammenführungsregel tools:node="remove".

Seit WorkManager 2.6 wird App-Start verwendet. in WorkManager integriert sind. Um einen benutzerdefinierten Initialisierer bereitzustellen, müssen Sie Entfernen Sie den androidx.startup-Knoten.

Wenn Sie „App-Start“ in Ihrer App nicht verwenden, können Sie die App 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 WorkManager-Version 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 zu Mehrere Manifestdateien zusammenführen.

Configuration.Provider implementieren

Lassen Sie die Application-Klasse die Configuration.Provider und Ihre eigene Implementierung Configuration.Provider.getWorkManagerConfiguration Wenn Sie WorkManager verwenden müssen, rufen Sie unbedingt die Methode WorkManager.getInstance(Context) WorkManager ruft die benutzerdefinierte getWorkManagerConfiguration()-Methode Ihrer App auf, um Configuration entdecken. (Sie müssen die WorkManager.initialize Sie selbst.)

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 dem WorkManager 2.1.0

Bei WorkManager-Versionen vor Version 2.1.0 gibt es zwei Initialisierungen Optionen. In den meisten Fällen Standardinitialisierung ist alles, was Sie brauchen. Um den WorkManager genauer zu steuern, können Sie eigene Konfiguration festlegen.

Standardinitialisierung

WorkManager verwendet eine benutzerdefinierte ContentProvider zur Initialisierung, wenn deine App beginnt. Dieser Code befindet sich in der internen Klasse androidx.work.impl.WorkManagerInitializer und verwendet die Standardeinstellung Configuration Der Standardinitialisierer wird automatisch verwendet, es sei denn, Sie ausdrücklich deaktivieren. Der Standardinitialisierer ist für die meisten Anwendungen geeignet.

Benutzerdefinierte Initialisierung

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

Sobald der Standardinitialisierer entfernt wurde, können Sie 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);

Stellen Sie sicher, dass die Initialisierung des WorkManager Singleton läuft entweder in Application.onCreate() oder in einer ContentProvider.onCreate()

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