Pular para o conteúdo principal

Melhores Bibliotecas Android para a Execução Repetitiva de Código

Aqui e ali, em seu projeto andróide, você tende a precisar de maneiras de executar o código repetidamente ou após um certo período. Há a maneira padrão de usar a classe Handler, porém isto pode levar a vazamentos de memória em seu aplicativo. Neste artigo, veremos algumas soluções fáceis de terceiros para este problema.

**Questões Este artigo responde***

  1. Como executar um pedaço de código repetidamente?
  2. Como executar um trecho de código após uma certa duração?

(a) Solução 1: Utilize "sempre-após".

Biblioteca Android para executar tarefas após determinado tempo (opcionalmente de forma repetitiva) sem se preocupar com vazamentos de memória!

A "sempre-após" é uma biblioteca Android para executar um pedaço de código (opcionalmente de forma repetitiva) após um determinado intervalo de tempo. Ela expõe funções de extensão no LifecycleOwner para conseguir isso.

Documentação

---

Como instalar

  1. No nível de projeto build.gradle:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}

  1. Em nível de aplicação build.gradle:
dependencies {
implementation 'com.github.sidhuparas:every-after:1.1'
}

Exemplo

Aqui está um exemplo completo em Kotlin:

**MainActivity.kt***

package com.paras.everysample

import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.paras.every.after.after
import com.paras.every.every
import com.paras.every.everyMinute
import com.paras.every.everySecond
import java.util.concurrent.TimeUnit

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val sec = everySecond { time ->
log("1. $time")
}

everyMinute { time ->
log("2. $time")
}

after(1, TimeUnit.MINUTES) {
sec.cancel()
log("3. Done")
}

every(1, TimeUnit.MINUTES) { time ->
log("4. $time")
}
}

private fun log(message: Any?) {
Log.d("Every-After", message.toString())
}
}

FAQ

  1. Posso utilizar o Handler' para replicar a funcionalidade da função depois'. Por que eu deveria precisar da função "depois" ou desta biblioteca? Ans: Sabe-se que o "Handler" muitas vezes causa vazamentos de memória quando utilizado de forma descuidada. Com o "depois", você não precisa se preocupar em cancelar a tarefa se a atividade ou fragmento for destruído. É automaticamente tomado cuidado.
  2. Posso cancelar tarefas sozinho? Ans: Sim, cada função retorna um objeto que tem uma interface "cancelável" implementada. Basta chamar a função "cancelar()Cancelar() para cancelar a tarefa.
  3. Não tenho acesso a objetos do LifecycleOwner. Eu posso cancelar a tarefa por conta própria. Posso utilizar as funções sem o LifecycleOwner? Ans: Atualmente, não. Em breve.

Referência

Encontre a referência completa aqui.