em lidar com lifecycle, facilidade em causar leaks de memória • IntentService - API verbosa e a necessidade de se criar um serviço para cada tarefa (ou uma tarefa com muita lógica) • Threads - pouco controle (ou controle demais?)
Reactive Extensions • Mais que uma biblioteca de assincronismo • Introduz paradigmas de programação reativa funcional • Tem uma curva de aprendizado íngreme
mesmo se o app for fechado, mas não precisam ser executadas em um momento exato É uma solução consistente semelhante ao JobScheduler Ex: upload de logs, sincronização com servidor, tarefas de processamento pesado, que podem demorar bastante 34
to "key").toWorkData()) .build() WorkManager.getInstance()?.enqueue(firstWork) // Dentro do método doWork() inputData.getString("key", "Default Value")
obter um wakelock - não é necessário requisitar • é executado numa thread em background • não deve iniciar nenhuma nova thread - deve retornar um status • não pode rodar pra sempre - ~10 minutos 51
EXAMPLE https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md WORKMANAGER https://developer.android.com/topic/libraries/architecture/workmanager 52