¿Que es un Hilo (Thread)?

Un hilo es un proceso como en Java o otro lenguaje de programación que se ejecuta en hilo secundario o el hilo principal también llamado hilo Cero. Lo hilos o en ingles Thread son procesos ejecutando en en el background ya sea haciendo un tarea como conexiones remotas, descarga de imágenes entre otros. También podemos decir procesos multitarea es como muchas personas de multiplicaran haciendo diferente tes procesos paralelamente para entenderlo de esa forma en la vida real. Pero veamos aplicando ejemplos en Android usando el IDE oficial Android Studio

Clase y Métodos de la clase Thread :

  • .Thread : Clase principal que heredan para crear un hilo personalizado.
  • .run() : método que implementa la lógica en el background o en otro hilo
  • .start() : ejecuta el hilo en plano paralelo

Reglas de Oro de un Hilo en Android :

  • Solo el Hilo principal puede modificar la interfaz gráfica
  • Tener cuidado con el Hilo principal porque la aplicación puede detenerse
  • Usar Hilo secundarios para conexiones, descargas de imágenes, Streams y etc.

Ejemplo de un Hilo que hereda lo sgte :

Aquí vemos como creamos una clase con modificador de acceso private que herede de la clase principal Thread con la palabra reservada extends.

// Creamos una clase para nuesro Hilo
private class MiHilo extends Thread{

      @Override
      public void run(){
          for (int i = 1 ; i<=10; i++){

              try {
                  Thread.sleep(2000);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
              Log.d("INFO", String.valueOf(i));

          }
      }
  }

// ejecutamos el Hilo creado
MiHilo miHilo = new MiHilo();
miHilo.start();

Otra forma de crear un Hilo :

Aquí podemos ejecutar directamente el Hilo Thread como una clase anónima sin necesidad de crear una clase y objeto en Android.

// Aqui ejecutamos directamente un hilo
new Thread(new Runnable() {
                   @Override
                   public void run() {                       
                     texto.setText(cadena);                     
                   }
               }).start();

 

Modificar la interfaz gráficas con un Hilo secundario :

Esto en teoría no se debe hacer pero en algunas ovaciones puede  hacerlo de gran utilidad :

  • .post(new Runnable)
  • runOnUiThread(new Runnable)

Veamos el código en un MainActivity.java :

package com.rogernatividad.trabajandoconhilos;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    TextView texto;
    Button boton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        texto = findViewById(R.id.texto);
        boton = findViewById(R.id.boton);


        boton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // ejecutamos el hilo
           /*     MiHilo miHilo = new MiHilo();
                miHilo.start();
                */
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                       final String cadena = "Un nuevo mundo Feliz";

                       runOnUiThread(new Runnable() {
                           @Override
                           public void run() {
                               texto.setText(cadena);
                           }
                       });

                    }
                }).start();
            }
        });
    }

 

Como hemos visto han sido conceptos de Hilos (Thread) y como se comporta en una aplicación Android usando Java.