Domyślnie WorkManager konfiguruje się automatycznie przy uruchamianiu aplikacji, korzystając z rozsądnych opcji, które są odpowiednie dla większości aplikacji. Jeśli potrzebujesz większej kontroli nad sposobem zarządzania harmonogramami i zarządzaniem nimi przez WorkManager, możesz dostosować konfigurację WorkManagera, inicjując usługę WorkManager samodzielnie.
Inicjacja na żądanie
Inicjowanie na żądanie pozwala utworzyć usługę WorkManager tylko wtedy, gdy potrzebny jest ten komponent, a nie przy każdym uruchomieniu aplikacji. W ten sposób WorkManager rezygnuje z krytycznej ścieżki startowej, co poprawia wydajność uruchamiania aplikacji. Aby użyć inicjowania na żądanie:
Usuń domyślny inicjator
Aby udostępnić własną konfigurację, musisz najpierw usunąć domyślny inicjator. W tym celu zaktualizuj AndroidManifest.xml
za pomocą reguły scalania tools:node="remove"
.
Od wersji WorkManager 2.6 narzędzie App Startup jest używane wewnętrznie w usłudze WorkManager. Aby udostępnić niestandardowy inicjator, musisz usunąć węzeł androidx.startup
.
Jeśli nie używasz w niej funkcji uruchamiania aplikacji, możesz ją całkowicie usunąć.
<!-- If you want to disable android.startup completely. -->
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
W przeciwnym razie usuń tylko węzeł 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>
Jeśli używasz wersji WorkManagera starszej niż 2.6, usuń zamiast tego workmanager-init
:
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove" />
Więcej informacji o używaniu reguł scalania w pliku manifestu znajdziesz w dokumentacji dotyczącej scalania wielu plików manifestu.
Implementacja konfiguracji.Provider
Zadbaj o to, aby klasa Application
zaimplementowała interfejs Configuration.Provider
i zapewniła własną implementację interfejsu Configuration.Provider.getWorkManagerConfiguration
.
Jeśli musisz skorzystać z usługi WorkManager, wywołaj metodę WorkManager.getInstance(Context)
.
WorkManager wywołuje niestandardową metodę getWorkManagerConfiguration()
aplikacji, aby wykryć jej Configuration
. (Nie musisz samodzielnie wywoływać funkcji WorkManager.initialize
).
Oto przykład niestandardowej implementacji obiektu 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(); } }
Inicjowanie niestandardowe przed WorkManagerem 2.1.0
W przypadku wersji WorkManager starszych niż 2.1.0 dostępne są 2 opcje inicjowania. W większości przypadków wystarczy inicjowanie domyślne. Aby mieć dokładniejszą kontrolę nad WorkManagerem, możesz określić własną konfigurację.
Inicjowanie domyślne
WorkManager używa niestandardowego elementu ContentProvider
do inicjowania się podczas uruchamiania aplikacji. Ten kod znajduje się w klasie wewnętrznej androidx.work.impl.WorkManagerInitializer
i korzysta z domyślnego kodu Configuration
.
Domyślny inicjator będzie używany automatycznie, chyba że jawnie go wyłączysz.
Domyślny inicjator jest odpowiedni dla większości aplikacji.
Inicjowanie niestandardowe
Jeśli chcesz kontrolować proces inicjowania, musisz wyłączyć domyślny inicjator, a potem zdefiniować własną konfigurację niestandardową.
Po usunięciu domyślnego inicjatora możesz ręcznie zainicjować menedżera 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);
Sprawdź, czy inicjowanie singletonu WorkManager
odbywa się w Application.onCreate()
lub ContentProvider.onCreate()
.
Pełną listę dostępnych dostosowań znajdziesz w dokumentacji referencyjnej Configuration.Builder()
.