Пользовательская конфигурация и инициализация WorkManager

По умолчанию 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() .