Niestandardowa konfiguracja i inicjowanie menedżera WorkManager

Domyślnie WorkManager konfiguruje się automatycznie przy uruchamianiu aplikacji, za pomocą rozsądnych opcji, które są odpowiednie dla większości aplikacji. Jeśli potrzebujesz więcej kontroli nad sposobem zarządzania i harmonogramów WorkManagera, możesz Konfiguracja WorkManagera przez samodzielne zainicjowanie WorkManagera.

Inicjacja na żądanie

Inicjowanie na żądanie pozwala tworzyć WorkManager tylko wtedy, gdy ten komponent jest potrzebne, a nie za każdym razem, gdy aplikacja się uruchamia. Spowoduje to wyłączenie WorkManagera i zwiększa wydajność startupów. Do użycia na żądanie inicjalizacja:

Usuń domyślny inicjator

Aby utworzyć własną konfigurację, musisz najpierw usunąć domyślną inicjator. Aby to zrobić, zaktualizuj AndroidManifest.xml przy użyciu reguły scalania tools:node="remove".

Od wersji WorkManager 2.6 używany jest App Startup w ramach platformy WorkManager. Aby udostępnić niestandardowy inicjator, musisz wykonać usuń węzeł androidx.startup.

Jeśli nie używasz w swojej aplikacji 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 WorkManager w wersji 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 na ten temat: scalanie wielu plików manifestu.

Wdróż dostawcę Configuration.Provider

Poproś klasę Application o zaimplementowanie: Configuration.Provider. i udostępnić własną implementację Configuration.Provider.getWorkManagerConfiguration Jeśli chcesz użyć narzędzia WorkManager, pamiętaj, aby wywołać metodę WorkManager.getInstance(Context) WorkManager wywołuje niestandardową metodę getWorkManagerConfiguration() aplikacji, aby znajdziesz miejsce: Configuration. (Nie trzeba dzwonić WorkManager.initialize samodzielnie).

Oto przykład niestandardowej implementacji atrybutu 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 wersją WorkManager 2.1.0

W przypadku wersji WorkManager starszych niż 2.1.0 są 2 inicjacje . W większości przypadków inicjowanie domyślne to wystarczy. Aby mieć dokładniejszą kontrolę nad WorkManagerem, możesz określić własną konfigurację.

Inicjowanie domyślne

WorkManager używa niestandardowego interfejsu ContentProvider do inicjowania się, gdy aplikacja zaczyna się. Ten kod znajduje się w klasie wewnętrznej androidx.work.impl.WorkManagerInitializer i używa wartości domyślnej Configuration Automatycznie używany jest domyślny inicjator, chyba że wyraźnie ją wyłączyć. 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 następnie zdefiniować własną konfigurację.

Po usunięciu domyślnego inicjatora można zainicjować go ręcznie Menedżer roboczy:

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

Upewnij się, że zainicjowano WorkManager singleton działa zarówno w Application.onCreate() lub w ContentProvider.onCreate().

Pełną listę dostępnych dostosowań znajdziesz tutaj: Configuration.Builder() dokumentacji referencyjnej.