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()
.