По умолчанию WorkManager настраивается автоматически при запуске приложения, используя параметры, подходящие для большинства приложений. Если вам требуется больше контроля над тем, как WorkManager управляет задачами и планирует их, вы можете настроить конфигурацию WorkManager, инициализировав его самостоятельно.
Инициализация по запросу
Инициализация по запросу позволяет создавать WorkManager только тогда, когда этот компонент необходим, а не при каждом запуске приложения. Это позволит убрать WorkManager из критического пути запуска и повысить производительность приложения при запуске. Чтобы использовать инициализацию по запросу, выполните следующие действия:
Удалите инициализатор по умолчанию
Чтобы указать собственную конфигурацию, сначала удалите инициализатор по умолчанию. Для этого обновите AndroidManifest.xml, используя правило объединения tools:node="remove".
Начиная с версии WorkManager 2.6, библиотека App Startup используется внутри WorkManager. Чтобы предоставить собственный инициализатор, удалите узел androidx.startup.
Если вы не используете App 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
Реализуйте интерфейс Configuration.Provider в классе Application и предоставьте собственную реализацию метода Configuration.Provider.getWorkManagerConfiguration.
Если вам нужно использовать WorkManager, вызовите метод WorkManager.getInstance(Context).
WorkManager вызывает пользовательский метод getWorkManagerConfiguration() вашего приложения, чтобы обнаружить его Configuration. (Вам не нужно звонить в WorkManager.initialize самостоятельно.)
Вот пример реализации специального тега 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(); } }
Пользовательская инициализация до WorkManager 2.1.0
Для версий WorkManager до 2.1.0 есть два варианта инициализации. В большинстве случаев достаточно инициализации по умолчанию. Чтобы точнее контролировать WorkManager, вы можете задать собственную конфигурацию.
Инициализация по умолчанию
WorkManager использует собственный класс ContentProvider для инициализации при запуске приложения. Этот код находится во внутреннем классе androidx.work.impl.WorkManagerInitializer и использует Configuration по умолчанию.
Инициализатор по умолчанию используется автоматически, если вы не отключите его явным образом.
Инициализатор по умолчанию подходит для большинства приложений.
Специальная инициализация
Если вы хотите управлять процессом инициализации, отключите инициализатор по умолчанию и задайте собственную конфигурацию.
После удаления инициализатора по умолчанию вы можете инициализировать 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);
Убедитесь, что инициализация синглтона WorkManager выполняется в Application.onCreate() или ContentProvider.onCreate().
Полный список доступных настроек приведен в справочной документации по Configuration.Builder().