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

[sourcecode language=”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();
}

}
[/sourcecode]

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

[sourcecode language=”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>
[/sourcecode]

Descárgate el código aquí