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.