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
- ¿Cómo se ejecuta un trozo de código de forma repetitiva?
- ¿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
- En el nivel de proyecto
build.gradle:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
- 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
- Puedo usar
Handlerpara replicar la funcionalidad de la funciónafter. ¿Por qué debería necesitar la funciónaftero 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. - **Respuesta: Sí, cada función devuelve un objeto que tiene implementada la interfaz
Cancellable. Sólo tiene que llamar a la funcióncancel()para cancelar la tarea. - 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í.