Saltar al contenido principal

Las mejores librerías Android para ejecutar un código de forma repetitiva

Aquí y allá, en tu proyecto android, tiendes a necesitar formas de ejecutar código repetitivamente o después de un cierto período. Existe la forma estándar de utilizar la clase Handler, sin embargo, esto puede conducir a fugas de memoria en su aplicación. En este artículo, veremos algunas soluciones fáciles de terceros para este problema.

Preguntas que este artículo responde

  1. ¿Cómo se ejecuta un trozo de código de forma repetitiva?
  2. ¿Cómo se ejecuta un trozo de código después de una determinada duración?

(a) Solución 1: Utilizar la librería every-after.

¡La biblioteca de Android para ejecutar tareas después de un tiempo determinado (opcionalmente de forma repetitiva) sin preocuparse por las fugas de memoria!

every-after es una biblioteca de Android para ejecutar una pieza de código (opcionalmente de forma repetitiva) después de cierto intervalo de tiempo. Expone funciones de extensión en LifecycleOwner para lograr esto.

Documentación

---

Cómo instalar

  1. En el nivel de proyecto build.gradle:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}

  1. En el nivel de aplicación build.gradle:
dependencies {
implementation 'com.github.sidhuparas:every-after:1.1'
}

Ejemplo

Aquí tienes un ejemplo completo en 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. Puedo usar Handler para replicar la funcionalidad de la función after. ¿Por qué debería necesitar la función after o esta librería? Respuesta: El Handler es conocido por causar fugas de memoria cuando se usa sin cuidado. Con every-after, no es necesario ocuparse de cancelar la tarea si la actividad o el fragmento se destruyen. Se encarga automáticamente.
  2. **Respuesta: Sí, cada función devuelve un objeto que tiene implementada la interfaz Cancellable. Sólo tiene que llamar a la función cancel() para cancelar la tarea.
  3. No tengo acceso al objeto LifecycleOwner. Puedo cancelar la tarea por mi cuenta. ¿Puedo utilizar las funciones sin LifecycleOwner? Respuesta: Actualmente, no. Próximamente.

Referencia

Encuentre la referencia completa aquí.