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.