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
Концептуальный пример:
fun fun1() = async<String> {
val user = await(repo.getUser())
user.username
}
Выполнение периодических событий
TimerTask
Coroutines
В 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