Como realizar acción tras esperar unos segundos con postDelayed

Objetivo:

Realizar una acción que deseemos tras esperar unos segundos.

Hay momentos en los que desearemos, que transcurridos unos segundos, nuestra aplicación ejecute una acción determinada automáticamente (por ejemplo, en un juego en el que tenemos solamente 1 minuto de partida, que acabado dicho minuto, se pare y muestre un mensaje de fin).
Ello lo conseguiremos facilmente aplicando un retraso (postDelayed) a un manejador (handler).
El ejemplo que a continuación programamos consiste en un aplicación en la que, tras 5 segundos de pulsar un botón, la aplicación se cierra automáticamente:

Captura de pantalla

Captura de pantalla - Realiza accion tras unos segundos

Código fuente java (/src/Principal.java):

package com.acciontrassegundos.tutorialandroid;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;

public class Principal extends Activity {

	public static int MILISEGUNDOS_ESPERA = 5000;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

	/**
	 * Al pulsar el botón ejecutamos la funcion de espera
	 * @param v
	 */
	public void onClick_AccionTrasSegundos(View v) {
		esperarYCerrar(MILISEGUNDOS_ESPERA);
	}

	/**
	 * Espera y cierra la aplicación tras los milisegundos indicados
	 * @param milisegundos
	 */
	public void esperarYCerrar(int milisegundos) {
		Handler handler = new Handler();
		handler.postDelayed(new Runnable() {
			public void run() {
				// acciones que se ejecutan tras los milisegundos
				finalizarApp();
			}
		}, milisegundos);
	}

	/**
	 * Finaliza la aplicación
	 */
	public void finalizarApp() {
		finish();
	}

}

Código fuente XML (/res/layout/main.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">

	<TextView android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:text="by TutorialAndroid.com\n\nPulsa el botón, y tras 5 segundos la aplicación se cerrará automáticamente.\n" />

	<Button android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:text="Cerrar App tras 5 segundos"
		android:onClick="onClick_AccionTrasSegundos" />

</LinearLayout>

Descárgate el código aquí

4 comentarios en “Como realizar acción tras esperar unos segundos con postDelayed

  1. gracias! Estoy creando un juego de memoria para Android y necesario para que el sistema espere unos 2 segundos para comparar las tarjetas. Utilizei Threads, TimerTasks y no funciono. Y uno Handler funciono! :)

  2. es posible enviar dos textView que contiene la latitud y la longitud a mysql de esta manera.. en este momento guardo esos datos con un boton, pero quiero que se guarden cada 10 minutos sin necesidad de presionar el boton.

Responder a Bonhu Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Rellena el captcha please!! *