Personalizar a configuração e a inicialização do WorkManager

Por padrão, o WorkManager é configurado automaticamente quando seu app é iniciado, usando opções razoáveis e adequadas para a maioria dos apps. Se você precisa de mais controle de como o WorkManager gerencia e programa o trabalho, pode personalizar a configuração do WorkManager inicializando-o.

WorkManager 2.1.0 e versões posteriores

O WorkManager 2.1.0 oferece várias maneiras de configurar o WorkManager. A maneira mais flexível de oferecer uma inicialização personalizada para o WorkManager é usar a inicialização sob demanda, disponível no WorkManager 2.1.0 e em versões posteriores. As outras opções serão discutidas posteriormente.

Inicialização sob demanda

A inicialização sob demanda permite criar o WorkManager somente quando esse componente é necessário, em vez de toda vez que o app é iniciado. Isso afasta o WorkManager do caminho crítico de inicialização, melhorando o desempenho da inicialização do app. Para usar a inicialização sob demanda:

Remova o inicializador padrão

Para fornecer sua própria configuração, primeiro remova o inicializador padrão. Para fazer isso, atualize AndroidManifest.xml usando a regra de combinação tools:node="remove":

<provider
        android:name="androidx.work.impl.WorkManagerInitializer"
        android:authorities="${applicationId}.workmanager-init"
        tools:node="remove" />
    

Para mais informações sobre como usar regras de combinação no seu manifesto, consulte a documentação sobre combinar vários arquivos de manifesto.

Implemente Configuration.Provider

Solicite que sua classe Application implemente a interface Configuration.Provider e forneça sua própria implementação de Configuration.Provider.getWorkManagerConfiguration().

Quando você precisar usar o WorkManager, chame o método WorkManager.getInstance(Context). O WorkManager chama o método getWorkManagerConfiguration() personalizado do seu app para descobrir o Configuration. Você não precisa chamar WorkManager.initialize().

Veja aqui um exemplo de implementação personalizada do 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 Configuration.Builder()
                    .setMinimumLoggingLevel(android.util.Log.INFO)
                    .build();
        }
    }
    

WorkManager 2.0.1 e versões anteriores

Para versões mais antigas do WorkManager, há duas opções de inicialização:

Inicialização padrão
Na maioria dos casos, a inicialização padrão é tudo o que você precisa.
Inicialização personalizada
Para ter um controle mais preciso do WorkManager, você pode especificar uma configuração própria.

Inicialização padrão

O WorkManager usa um ContentProvider personalizado para se inicializar quando o app é iniciado. Esse código reside na classe interna androidx.work.impl.WorkManagerInitializer e usa o Configuration padrão. O inicializador padrão é usado automaticamente, a menos que você desative-o explicitamente. O inicializador padrão é adequado para a maioria dos apps.

Inicialização personalizada

Se você quer controlar o processo de inicialização, desative o inicializador padrão e defina sua configuração personalizada.

Depois que o inicializador padrão é removido, você pode inicializar o WorkManager manualmente:

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

o singleton WorkManager. Certifique-se de que a inicialização seja executada em Application.onCreate() ou em ContentProvider.onCreate().

Para ver a lista completa de personalizações disponíveis, consulte a documentação de referência de Configuration.Builder().