Kotlin Coroutine , Coroutin (中文翻 “协程” )这个词在android 常常会用到和听到,
那到底是什麽意思呢? Kotlin Coroutin 在官网的说明是一个轻量的执行绪,可以协同排程其他的工作
顺利的 执行,不会占用主线程,在背景排程执行。
在Android 上就不会占用主线程,造成UI卡顿,进而变成ANR。
第一支 Coroutine
GlobalScope.launch
fun main() {
GlobalScope.launch { //在背景启动一个新的协程
delay(1000L)
println("World!")
}
println("Hello,") //主线程会马上执行
}
runBlocking and Dispatchers
fun main() {
GlobalScope.launch { //在背景启动一个新的协程
delay(1000L)
println("World!")
}
runBlocking (Dispatchers.IO){ //阻塞住主线程,在io线程上执行 ,用main线程就anr了
delay(500L)
println("Kotlin World!")
}
println("Hello,") //被阻塞住了主线程,就没有马上执行
}
suspend fun
fun main() {
GlobalScope.launch { //在背景启动一个新的协程,并确保子线程
delay(1000L)
println("World!")
//等待子线程执行结束
jointest()
}
println("Hello,") //主线程会马上执行
}
suspend fun jointest()= coroutineScope{
launch {
delay(4000L)
println("World! 2")
}
launch {
delay(2000L)
println("World! 1")
}
println("Hello,")
}
Coroutine context and Cancel job
fun main(){
val job = GlobalScope.launch {
GlobalScope.launch {
println("job1")
delay(1000)
println("job1 delay 1000")
}
//协程的上下文
launch {
delay(100)
println("job2 delay100")
delay(1000)
println("job2: delay1000")
}
}
job.cancel() // 请求执行"取消",job2就没执行了
println("main: Hello")
}
结论:
後续会有结合 Android jetpack ViewModel LiveData 的实作范例
https://kotlinlang.org/docs/coroutines-guide.html
<<: Day02: 02 - 前端 - 开启专案、页面刻划、bootstrap-vue使用
这边会给大家一些练习题, 以及参考解答, 过程可能会与大家有些不尽相同, 还请各位多多包涵, 我会先...
本节是以 Golang 上游 8854368cb076ea9a2b71c8b3c8f675a8e1...
超时空跑马灯 ( 广播 ) 教学原文参考:超时空跑马灯 ( 广播 ) 这篇文章会介绍如何使用「发送数...
什麽是知识蒸馏 Knowledge Distillation 知识蒸馏 Knowledge Dist...
专案是组织进行的一个暂时性(有明确的开始与结束时间)的努力付出,在一段事先确认的时间内,运用事先决定...