Como realizar acción tras esperar unos segundos con postDelayed

18 septiembre, 2011 por Gonzalo de Córdoba Dejar una respuesta »

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í

Publicidad

4 comentarios

  1. Bonhu dice:

    Funciona perfecto. Gracias!

  2. Thiago dice:

    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! :)

  3. Miguel Rodriguez dice:

    gracias por la función (y)
    lo utilice para inicializar una nueva actividad

  4. felipe dice:

    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.

Deja un comentario

Rellena el captcha please!! *

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies