Sei sulla pagina 1di 5

Manejo de Hilos

Qu son los Hilos?


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.


2. Vamos a crear el siguiente cdigo en al activity_main principal.
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<EditText
android:id="@+id/entrada"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:inputType="numberDecimal"
android:text="5" >
<requestFocus />
</EditText>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="calcularOperacion"
android:text="Calcular factorial" />
</LinearLayout>
<TextView
android:id="@+id/salida"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text=" "
android:textAppearance="?android:attr/textAppearanceMedium"/>
</LinearLayout>

ISC Carolina Rincn Canseco

Reemplaza el cdigo de MainActivity por el siguiente:


package com.example.hilos;
import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.os.Build;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private EditText entrada;
private TextView salida;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
entrada = (EditText) findViewById(R.id.entrada);
salida = (TextView) findViewById(R.id.salida);
ISC Carolina Rincn Canseco

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

Fin de la prctica.

ISC Carolina Rincn Canseco

Potrebbero piacerti anche