Corrutinas en Kotlin
Cómo usar corrutinas en Kotlin
Corrutinas en Kotlin 1.3: funciones de suspensión, contexts, builders y scopes
dependencies { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9") }
Crear el proyecto CorrutinasKotlin
Añadir viewBinding
buildFeatures { viewBinding = true }
Añadir dependencias
// implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3") implementation(libs.kotlinx.coroutines.android)
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="70dp" android:layout_marginBottom="43dp" android:text="Proceso 1" android:textAppearance="@style/TextAppearance.AppCompat.Large" app:layout_constraintBottom_toTopOf="@+id/countNumber" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/countNumber" android:layout_width="136dp" android:layout_height="150dp" android:text="0" android:textAlignment="center" android:textSize="60sp" app:layout_constraintBottom_toTopOf="@+id/countButton" app:layout_constraintEnd_toEndOf="@+id/countButton" app:layout_constraintStart_toStartOf="@+id/countButton" app:layout_constraintTop_toBottomOf="@+id/textView1" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="10dp" android:layout_marginBottom="41dp" android:text="Proceso 2" android:textAppearance="@style/TextAppearance.AppCompat.Large" app:layout_constraintBottom_toTopOf="@+id/downloadNumber" app:layout_constraintEnd_toEndOf="@+id/countButton" app:layout_constraintTop_toBottomOf="@+id/countButton" /> <TextView android:id="@+id/downloadNumber" android:layout_width="258dp" android:layout_height="36dp" android:text="0" android:textAlignment="center" app:layout_constraintBottom_toTopOf="@+id/downloadButton" app:layout_constraintEnd_toEndOf="@+id/downloadButton" app:layout_constraintStart_toStartOf="@+id/downloadButton" app:layout_constraintTop_toBottomOf="@+id/textView3" /> <Button android:id="@+id/countButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="125dp" android:layout_marginBottom="85dp" android:text="Start counting" app:layout_constraintBottom_toTopOf="@+id/textView3" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/countNumber" /> <Button android:id="@+id/downloadButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="150dp" android:text="Start downloading" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/downloadNumber" /> </androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.kt
class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding private var counter: Int = 0 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) binding.countButton.setOnClickListener { binding.countNumber.text = counter++.toString() } binding.downloadButton.setOnClickListener { for (i in 1..10000) { Log.i("TAG", "Downloading $i in ${Thread.currentThread().name}") } } } }
Uso de una corrutina:
binding.downloadButton.setOnClickListener { binding.downloadButton.isEnabled = false CoroutineScope(Dispatchers.IO).launch { for (i in 1..10000) { Log.i("TAG", "Downloading $i in ${Thread.currentThread().name}") // binding.downloadNumber.text = i.toString() // runOnUiThread(){ withContext(Dispatchers.Main) { binding.downloadNumber.text = i.toString() } } withContext(Dispatchers.Main) { binding.downloadButton.isEnabled = true } } }
Más información
Domina las Corrutinas
Coroutines con Kotlin — Introducción
Codelab: Cómo usar corrutinas de Kotlin en tu app para Android
Deja una respuesta
Lo siento, debes estar conectado para publicar un comentario.