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

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í
Funciona perfecto. Gracias!
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! :)
gracias por la función (y)
lo utilice para inicializar una nueva actividad
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.