По умолчанию WorkManager настраивается автоматически при запуске вашего приложения, используя разумные параметры, подходящие для большинства приложений. Если вам требуется больший контроль над тем, как WorkManager управляет и планирует работу, вы можете настроить конфигурацию WorkManager, инициализировав WorkManager самостоятельно.
Инициализация по требованию
Инициализация по требованию позволяет создавать WorkManager только тогда, когда этот компонент необходим, а не каждый раз при запуске приложения. При этом WorkManager удаляется с критического пути запуска, что повышает производительность запуска приложения. Чтобы использовать инициализацию по требованию:
Удалить инициализатор по умолчанию
Чтобы предоставить собственную конфигурацию, необходимо сначала удалить инициализатор по умолчанию. Для этого обновите AndroidManifest.xml
с помощью tools:node="remove"
.
Начиная с WorkManager 2.6, запуск приложения используется внутри WorkManager. Чтобы предоставить собственный инициализатор, вам необходимо удалить узел androidx.startup
.
Если вы не используете функцию запуска приложения в своем приложении, вы можете полностью удалить ее.
<!-- If you want to disable android.startup completely. -->
<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
В противном случае удалите только узел 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>
При использовании версии WorkManager старше 2.6 вместо этого удалите workmanager-init
:
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:authorities="${applicationId}.workmanager-init"
tools:node="remove" />
Дополнительные сведения об использовании правил слияния в манифесте см. в документации по объединению нескольких файлов манифеста .
Реализация Configuration.Provider
Пусть ваш класс Application
реализует интерфейс Configuration.Provider
и предоставляет собственную реализацию Configuration.Provider.getWorkManagerConfiguration
. Если вам нужно использовать WorkManager, обязательно вызовите метод WorkManager.getInstance(Context)
. WorkManager вызывает собственный метод getWorkManagerConfiguration()
вашего приложения, чтобы узнать его Configuration
. (Вам не нужно самостоятельно вызывать WorkManager.initialize
.)
Вот пример пользовательской реализации getWorkManagerConfiguration()
:
Котлин
class MyApplication() : Application(), Configuration.Provider { override fun getWorkManagerConfiguration() = Configuration.Builder() .setMinimumLoggingLevel(android.util.Log.INFO) .build() }
Ява
class MyApplication extends Application implements Configuration.Provider { @Override public Configuration getWorkManagerConfiguration() { return new Configuration.Builder() .setMinimumLoggingLevel(android.util.Log.INFO) .build(); } }
Пользовательская инициализация до WorkManager 2.1.0
Для версий WorkManager до версии 2.1.0 существует два варианта инициализации. В большинстве случаев инициализация по умолчанию — это все, что вам нужно. Для более точного управления WorkManager вы можете указать собственную конфигурацию .
Инициализация по умолчанию
WorkManager использует собственный ContentProvider
для своей инициализации при запуске приложения. Этот код находится во внутреннем классе androidx.work.impl.WorkManagerInitializer
и использует Configuration
по умолчанию. Инициализатор по умолчанию используется автоматически, если вы явно не отключите его . Инициализатор по умолчанию подходит для большинства приложений.
Пользовательская инициализация
Если вы хотите контролировать процесс инициализации, вам необходимо отключить инициализатор по умолчанию , а затем определить свою собственную конфигурацию.
После удаления инициализатора по умолчанию вы можете инициализировать WorkManager вручную:
Котлин
// provide custom configuration val myConfig = Configuration.Builder() .setMinimumLoggingLevel(android.util.Log.INFO) .build() // initialize WorkManager WorkManager.initialize(this, myConfig)
Ява
// provide custom configuration Configuration myConfig = new Configuration.Builder() .setMinimumLoggingLevel(android.util.Log.INFO) .build(); //initialize WorkManager WorkManager.initialize(this, myConfig);
Убедитесь, что инициализация синглтона WorkManager
выполняется либо в Application.onCreate()
, либо в ContentProvider.onCreate()
.
Полный список доступных настроек см. в справочной документации Configuration.Builder()
.