MultiThreading en Android con ejemplos

Trabajar en múltiples tareas al mismo tiempo es multitarea . De la misma manera, varios subprocesos que se ejecutan al mismo tiempo en una máquina se denominan subprocesos múltiples . Técnicamente, un hilo es una unidad de un proceso . Múltiples subprocesos de este tipo se combinan para formar un proceso. Esto significa que cuando un proceso se interrumpe, el número equivalente de subprocesos está disponible. 
Por ejemplo , Autocorrección es el proceso en el que el software busca los errores en la palabra actual que se está escribiendo. Verificar sin cesar el error y brindar sugerencias al mismo tiempo es un ejemplo de un proceso de subprocesos múltiples. 

Ejemplo de aplicación de Android:

Intentemos visualizar Multi-Threading con la ayuda de una aplicación de Android. En el siguiente ejemplo, 3 subprocesos comienzan al mismo tiempo al hacer clic en un botón y funcionan simultáneamente. 

Enfoque:  
Paso 1: Agregue el siguiente código en activity_main.xml . Aquí agregamos tres TextViews y un botón .
 

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
  
    <TextView
        android:id="@+id/tv1"
        android:layout_width="75sp"
        android:layout_height="75sp"
        android:background="@color/colorPrimary"
        android:textColor="@color/colorAccent"
        android:gravity="center"
        android:textSize="10sp"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@id/tv2"
        />
  
    <TextView
        android:id="@+id/tv2"
        android:layout_width="75sp"
        android:layout_height="75sp"
        android:background="@color/colorPrimary"
        android:textColor="@color/colorAccent"
        android:gravity="center"
        android:textSize="10sp"
        android:layout_centerInParent="true"
        />
  
    <TextView
        android:id="@+id/tv3"
        android:layout_width="75sp"
        android:layout_height="75sp"
        android:background="@color/colorPrimary"
        android:textColor="@color/colorAccent"
        android:gravity="center"
        android:textSize="10sp"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@id/tv2"
        />
  
    <Button
        android:id="@+id/btnStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Start"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/tv2"
        />
  
</RelativeLayout>

Paso 2: agregue el siguiente código en MainActivity . Aquí, se crean tres subprocesos, cada subproceso sigue actualizando el TextView respectivo cada segundo (declarado en el código) cuando se hace clic en el botón. Estos subprocesos siguen ejecutándose hasta que se vuelve a hacer clic en el botón (es decir, «Detener»). 
 

Java

class MainActivity : AppCompatActivity() {
    @SuppressLint("SetTextI18n")
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
  
            // Assigning Layout elements
            val tv1
            = findViewById<TextView>(R.id.tv1)
                val tv2
            = findViewById<TextView>(R.id.tv2)
                val tv3
            = findViewById<TextView>(R.id.tv3)
                val btn
            = findViewById<Button>(R.id.btnStart)
  
            // Boolean for Button (initially False)
            var boolbtn
            = false
              // Button onClick action
              btn.setOnClickListener
        {
            // Button (True)
            boolbtn = !boolbtn
                      // Case where Button is False
                      if (!boolbtn)
            {
                tv1.text = "Stopped1"
                tv2.text = "Stopped2"
                tv3.text = "Stopped3"
                btn.text = "Start"
            }
            // Case where Threads are running
            else
            {
                // Setting the button text as "Stop"
                btn.text = "Stop"
  
                           // Thread 1
                           Thread(Runnable {
  
                               // Runs only when Button is True
                               while (boolbtn) {
  
                                   runOnUiThread
                                   {
                                       tv1.text = "Started1"
                                   }
                                   Thread.sleep(1000)
                                       runOnUiThread
                                   {
                                       tv1.text = "Activity1"
                                   }
                                   Thread.sleep(1000)
                               }
                           }).start()
  
                           // Thread 2
                           Thread(Runnable {
  
                                 // Runs only when Button is
                                 // True
                                 while (boolbtn) {
                                     runOnUiThread
                                     {
                                         tv2.text = "Started2"
                                     }
                                     Thread.sleep(1000)
                                         runOnUiThread
                                     {
                                         tv2.text = "Activity2"
                                     }
                                     Thread.sleep(1000)
                                 }
                             }).start()
  
                           // Thread 3
                           Thread(Runnable {
  
                                   // Runs only when Button is
                                   // True
                                   while (boolbtn) {
                                       runOnUiThread
                                       {
                                           tv3.text = "Started3"
                                       }
                                       Thread.sleep(1000)
                                           runOnUiThread
                                       {
                                           tv3.text = "Activity3"
                                       }
                                       Thread.sleep(1000)
                                   }
                               })
                               .start()
            }
        }
    }
}

Producción:
 

El concepto Multi-Threading se aplica a una gran cantidad de aplicaciones diarias en varias máquinas. Sin embargo, hay inconvenientes en el mismo. En el nivel de principiante, uno solo puede pensar en la carga de la máquina o en una mayor complejidad. Pero a un nivel mayor, se esperan múltiples escenarios como pruebas complejas, resultados impredecibles, punto muerto, inanición, etc.
 

Publicación traducida automáticamente

Artículo escrito por aashaypawar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *