kotlin--9
程序员文章站
2022-04-18 12:48:27
本周kotlin,看到协程这个模块java里面线程可以new Threadkotlin协程用于线程切换,kotlin里面不需要new Thread,并且,协程的开销小于new Thread。有三种写法:runBlocking,launch,async既然协程的出现可以取代Thread,我们这里想要验证的是:会不会阻塞主线程?协程里面的代码是怎么执行的?按顺序执行还是并行?协程里面能不能更新页面?。......
本周kotlin,看到协程这个模块
java里面线程可以new Thread
kotlin协程用于线程切换,kotlin里面不需要new Thread,并且,协程的开销小于new Thread。有几种种写法:runBlocking,launch 说下他们简单用法 跟特点
依赖
协程需要额外依赖一个库协程用于android的库,它会自动依赖官方提供的那个协程的代码库。
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0-M2'
runBlocking
用法:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
runBlocking {
Log.e("wz", "for_start")
for (i in 0..5) {
Log.e("wz", i.toString())
}
Log.e("wz", "for_end")
tvName.text = "for_end"
}
Log.e("wz", "runBocking外")
}
结果:
从打印顺序上看,runBlocking的执行顺序是从上往下执行的,并且能更新页面
- 会阻塞线程
- 从上往下按顺序执行的
- 可以更新页面
java里面有Thread,所以线程休眠用Thread.sleep()。kotlin里面既然协程可以取代Thread,所以,kotlin也有自己的休眠方法,也就是上面的delay(),注意,这里delay只能用在协程里面,不能用在外面。
GlobalScope.launch
用法:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
GlobalScope.launch {
Log.e("wz", "for_start")
for (i in 0..5) {
Log.e("wz", i.toString())
}
Log.e("wz", "for_end")
tvName.text = "for_end"
}
Log.e("wz", "协程外")
}
结果:
从打印顺序上面看,launch是先执行外面的代码,然后执行协程里面的代码,并且更新了页面。回答上面的三个问题:
- 不会阻塞线程
- 既然不会阻塞线程,那就是并行的
- 能更新页面
本文地址:https://blog.csdn.net/yangbin0513/article/details/107095233
推荐阅读