Aprendiendo Android VII: Los hilos - Threads
Volvemos al ataque con la VII entrega de «Aprendiendo android».
Cuando se inició esta sección, al igual que ocurre con todas claro, no sabía si finalmente podría resultar de utilidad o facilitar las cosas a iniciados o no tan iniciados, lo cierto es que hasta la fecha de hoy he recibido no pocos tweets de personas que me cuentan que algo de lo aquí explicado les ha ayudado con sus aplicaciones o desarrollos. Solo quería comentar que no sabéis cuanto me alegra esto. Estoy encantado :)
Pues manos a la obra! Hoy vamos a hablar de una función muy útil y muy conocida. Hoy vamos a hablar de los «hilos» o Threads.
Para quien no venga de ningún otro lenguaje de programación, un hilo es básicamente una parte de código que se encarga de realizar alguna acción a la misma vez que se está ejecutando otra.
Veámoslo de esta forma, se inicia una actividad android (línea A del gráfico) y en determinado punto de esta línea, ejecutamos nuestro hilo (línea B), el resultado serán dos acciones simultáneas en una misma actividad.
Para este ejemplo haremos lo siguiente, vamos a crear una actividad con un botón, cada vez que pulsemos ese botón aparecerá el mensaje «pulsado» y en paralelo ejecutaremos un hilo que a los diez segundos funcionando mostrará el mensaje «Hola, soy un hilo».
Con este sencillo ejemplo podremos comprobar como a la vez que tenemos corriendo nuestra actividad ejecutando el botón cada vez que queramos, tendremos simultáneamente a nuestro hilo esperando diez segundos para ejecutar una orden.
Como viene siendo habitual, en primer lugar veremos el código completo y después lo iremos diseccionando.
Empecemos por el onCreate, que como sabemos, es lo primero que se ejecuta al llamar a nuestra actividad. Dentro de este podemos diferenciar dos acciones
miHilo();
Esta línea es la encargada de llamar y ejecutar nuestro hilo. Vemos también la declaración del botón y su listener. El funcionamiento de los botones ha sido ya revisado en anteriores entregas de esta sección. Como podemos leer, el código del botón solo muestra un mensaje a la pulsación.
Button botonuno =(Button) findViewById(R.id.Boton1);
botonuno.setOnClickListener(new View.OnClickListener(){ // llave 1
publicvoid onClick(View view){ // llave 0
Toast.makeText(elAndroideLibre.this, «Pulsado», Toast.LENGTH_SHORT).show();
}// llave 0
}); // llave 1
Como al ejecutar la actividad ya hemos visto que hemos ejecutado nuestro hilo, veamos que hace este. En primer lugar vemos que tenemos declarado nuestro navegador de eventos.
final Handler mHandler=new Handler();
Seguidamente vemos el código concreto que hemos llamado desde el onCreate.
Tras esto vamos a declarar lo que queremos que haga nuestro hilo una vez que lo hemos puesto a funcionar.
public void run() {
try {
Thread.sleep(10000);
}
catch (InterruptedException e){//5
e.printStackTrace();
}
Como se puede interpretar en el código, en esta parte es donde hemos indicado a nuestro hilo que «duerma» durante 10 segundos. Se que lo he comentado con anterioridad, pero sin querer ser reiterativo, insisto en la importancia de usar try/catch ya que si el programa se encuentra con alguna acción que no pueda realizar, podrá tener oposición a realizar otra, evitándonos así los cierres forzados.
Una vez pasada la acción de espera, indícanos el evento que vamos a ejecutar.
mHandler.post(ejecutarAccion);
Con esta línea de código, simplemente estamos llamando a
final Runnable ejecutarAccion =new Runnable (){
public void run(){
Toast.makeText(elAndroideLibre.this, «Hola, soy un hilo», Toast.LENGTH_SHORT).show();
}
};
Con este código estamos ejecutando el mensaje que es lanzado tras la espera del hilo de 10 segundos. Para comprobar el funcionamiento práctico de esto lo mejor es ejecutar la aplicación, ir pulsando cuando queramos el botón y observar como a los diez segundos se muestra el mensaje «Hola, soy un hilo», tal como indicaba el gráfico inicial.
En este ejemplo simplemente hemos aplicado el hilo pista mostrar un mensaje pero lógicamente, y como casi todo en programación, El límite está en la imaginación del desarrollador.
Solamente por probar, si con este mismo código sustituimos la línea que ordena mostrar el mensaje por esta otra:
setContentView(R.layout.main);
Tendremos una actividad que se inicia mostrando un entorno gráfico pero pasados 10 segundos, pasará a mostrar otro completamente diferente.
…Como decía, el límite está en la imaginación.
Una aplicación requiere de más o menos conocimientos, pero sobre todo, requiere de ganas, ilusión y originalidad.