Ejecución de Tareas Temporizadas en Android con la Clase Timer

En el desarrollo de aplicaciones para Android, es frecuante necesitar la ejecución de operaciones en intervalos específicos o tras un retardo determinado. La clase java.util.Timer ofrece un mecanismo nativo y directo para gestionar estas ejecuciones temporizadas, permitiendo programar tareas únicas o recurrentes en un hilo en segundo plano.

Métodos principales de la clase Timer

Esta clase proporciona diversas variantes del método de programación para adaptarse a distintos escenarios temporales:

  • schedule(TimerTask task, long delay): Ejecuta la tarea una única vez después de que transcurra el tiempo especificado en delay (en milisegundos).
  • schedule(TimerTask task, long delay, long period): Inicia la tarea tras el retardo inicial y la repite con un intervalo fijo entre el final de una ejecución y el inicio de la siguiente.
  • scheduleAtFixedRate(TimerTask task, long delay, long period): Similar al anterior, pero garantiza una tasa de ejecución fija, calculando los intervalos desde el inicio programado de cada tarea, lo que es útil para mantener la sincronización a largo plazo.

Implementación práctica

Para utilizar esta funcionalidad, es necesario definir la lógica de la tarea extendiendo la clase abstracta TimerTask. A continuación, se muestra una implementación refactorizada que simula un proceso de monitoreo en segundo plano:

import java.util.TimerTask;
import android.util.Log;

public class SystemMonitorTask extends TimerTask {
    private static final String TAG = "SystemMonitor";
    private int executionCount = 0;

    @Override
    public void run() {
        executionCount++;
        Log.d(TAG, "Ciclo de monitoreo completado. Total de ejecuciones: " + executionCount);
        // Aquí se insertaría la lógica de recolección de métricas o validación
    }
}

Posteriormente, se debe instanciar y configurar el temporizador dentro del ciclo de vida del componente de la interfaz de usuario, como un Activity. Es crucial gestionar correctamente la cancelación del temporizador para evitar fugas de memoria y consumo innecesario de recursos.

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Timer;

public class DashboardActivity extends AppCompatActivity {

    private Timer backgroundTimer;
    private static final long INITIAL_DELAY = 2000; // 2 segundos
    private static final long EXECUTION_PERIOD = 5000; // 5 segundos

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dashboard);

        initializeMonitoring();
    }

    private void initializeMonitoring() {
        backgroundTimer = new Timer("MonitorThread");
        SystemMonitorTask monitorTask = new SystemMonitorTask();

        // Programa la tarea con una tasa fija
        backgroundTimer.scheduleAtFixedRate(monitorTask, INITIAL_DELAY, EXECUTION_PERIOD);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (backgroundTimer != null) {
            backgroundTimer.cancel();
            backgroundTimer.purge();
        }
    }
}

En este ejemplo, el Timer se configura para iniciar tras un retardo de dos segundos y repetirse cada cinco segundos. Se ha integrado el método onDestroy() para asegurar que el hilo del temporizador se libere adecuadamente cuando la actividad se destruye, una práctica esencial para mantener la estabilidad de la aplicación.

Etiquetas: Android java Timer TimerTask Multithreading

Publicado el 5-31 01:10