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 sua classe Application
implemente o
Configuration.Provider
e fornecer sua própria implementação de
Configuration.Provider.getWorkManagerConfiguration
Quando 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()
.