Un hilo es bsicamente una parte de cdigo que se encarga de realizar alguna accin al mismo tiempo que se est ejecutando otra. Analizndolo grficamente inicia una actividad android (lnea A del grfico) y en determinado punto de esta lnea, ejecutamos nuestro hilo (lnea B), el resultado sern dos acciones simultneas en una misma actividad.
ISC Carolina Rincn Canseco
1. Vamos a crear un nuevo proyecto el cual se llamar Hilos.
} public void calcularOperacion(View view) { int n = Integer.parseInt(entrada.getText().toString()); salida.append(n +"! = ");
Funcin append agrega pequeas
cadenas a una cadena que tiene contenido
int res = factorial(n);
} public int factorial(int n) { int res=1; for (int i=1; i<=n; i++){ res=res*i; salida.append(res +"\n"); SystemClock.sleep(1000);
return res; } }
El mtodo calcularOperacion() ser llamado cuando se pulse el botn. Comienza
obteniendo el valor entero introducido en entrada y muestra la operacin a realizar por el TextView salida. Luego, se llama al factorial() y se muestra el resultado. El mtodo factorial() calcula la operacin matemtica: factorial de un entero n (n!). Se calcula multiplicando todos los enteros desde uno hasta n. Por ejemplo: factorial(5) = 5! = 1 2 3 4 5 = 120 Esta operacin se calcula con un bucle con la variable i tomando valores de 1 hasta n. Obviamente, esta operacin se va procesar de forma muy rpida y
ISC Carolina Rincn Canseco
apenas bloquearemos el hilo principal una milsimas de segundo. Para que
aparezca el problema a tratar, vamos a simular que se realizan un gran nmero de operaciones en cada pasada del bucle. Para esto llamaremos a SystemClock.sleep(1000) que bloquear el hilo durante 1000 ms (1 segundos). Ejecuta la aplicacin. El resultado ha de ser similar al siguiente:
Calcula el factorial de 5. Observa cmo mientras se realiza la operacin el usuario no
puede pulsar el botn ni modificar el EditText. El usuario tendr la sensacin de que la aplicacin est bloqueada. Calcula ahora el factorial de 10. Si mientras se calcula tratas de interaccionar con el interfaz de usuario el sistema nos mostrar en siguiente error: