Async Programming

Handlers & Выполнение кода вне главного потока

import kotlinx.coroutines.*

class MainActivity : AppCompatActivity {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        my_button.setOnClickListener {
            val handler = Handler() // этот инструмент нужен для того, чтобы
            // выполнять код из одного треда в главном (напрямую так делать нельзя)
            // например, обновить текстовое поле во вьюхе
            
            // Запускаем еще один поток
            Thread(Runnable {
                val test = 123
                /*
                doSomething()
                */
                
                // изменяем что-то в главном треде
                handler.post(Runnable {
                    outputView.text = "my text and $test"
                })
            }).start()
        }
    }
}

Async/Await

Введение: https://habr.com/ru/post/314656/

Концептуальный пример:

fun fun1() = async<String> {
    val user = await(repo.getUser())
    user.username
}

Еще ссылки: https://medium.com/@nhaarman/a-dive-into-async-await-on-android-5a6699029aa3 https://medium.com/@jitesh313/network-calls-kotlin-coroutine-retrofit-2-e058ebc56189

Выполнение периодических событий

TimerTask

Coroutines

Ссылки: https://android.jlelse.eu/kotlin-coroutines-and-retrofit-e0702d0b8e8f

В app/build.gradle:

// Kotlin & Coroutines
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version"

В коде

Thread(Runnable{
    // your code in background thread
}).start()

Last updated