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 agenda o trabalho, pode personalizar a configuração do WorkManager inicializando-o por conta própria.

Inicialização sob demanda

A inicialização sob demanda permite criar o WorkManager somente quando esse componente é necessário, em vez de fazer isso sempre 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".

Desde o WorkManager 2.6, a inicialização de apps é usada internamente no WorkManager. Para fornecer um inicializador personalizado, remova o nó androidx.startup.

Se você não usar a inicialização de apps em seu app, poderá removê-la completamente.

 <!-- If you want to disable android.startup completely. -->
 <provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    tools:node="remove">
 </provider>

Caso contrário, remova apenas o nó 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>

Ao usar uma versão do WorkManager anterior à 2.6, remova workmanager-init:

<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, consulte a documentação sobre combinar vários arquivos de manifesto.

Implemente Configuration.Provider

Faça com que a classe Application implemente a interface Configuration.Provider e forneça sua própria implementação de Configuration.Provider.getWorkManagerConfiguration (link em inglês). 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 a Configuration dele. Você não precisa chamar WorkManager.initialize.

Veja aqui um exemplo de implementação personalizada de 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();
    }
}

Inicialização personalizada antes do WorkManager 2.1.0

Para versões do WorkManager anteriores à versão 2.1.0, há duas opções de inicialização. Na maioria dos casos, a inicialização padrão é tudo o que você precisa. 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 a Configuration padrão. O inicializador padrão é usado de forma automática, 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);

Garanta que a inicialização do singleton WorkManager seja executada em Application.onCreate() ou em um ContentProvider.onCreate().

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