协程(Coroutine)
- 协程就像非常轻量级的线程。线程是由系统调度的,线程切换或线程阻塞的开销都比较大。而协程依赖于线程,但是协程挂起时不需要阻塞线程,协程是由开发者控制的。所以协程也像用户态的线程,非常轻量级,一个线程中可以创建任意个协程。
- 协程就像轻量级的线程。线程由系统调度,协程由开发者控制。
- kotlin协程本质上是对线程池的封装
协程通过将线程切换的复杂性封装入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步性。
GlobalScope(不推荐)
- GlobalScope.launch
使用的是DefaultDispatcher,会自动切换到后台线程,不能做UI操作
GlobalScope.launch {
Log.d(TAG, "GlobalScope开启协程:" + Thread.currentThread().name)
}
GlobalScope.launch {
Log.d(TAG, "GlobalScope开启协程:" + Thread.currentThread().name)
withContext(Dispatchers.Main){
Toast.makeText(this@MainActivity, "协程中切换线程", Toast.LENGTH_SHORT).show()
}
}
- GlobalScope.launch(Dispatchers.Main)
通过Dispatchers.Main使协程依托于主线程中,此时可以