Niestandardowa konfiguracja i inicjowanie menedżera WorkManager

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