Kotlin协程的简单用法(GlobalScope、lifecycleScope、viewModelScope)

协程(Coroutine)

  • 协程就像非常轻量级的线程。线程是由系统调度的,线程切换或线程阻塞的开销都比较大。而协程依赖于线程,但是协程挂起时不需要阻塞线程,协程是由开发者控制的。所以协程也像用户态的线程,非常轻量级,一个线程中可以创建任意个协程。
  • 协程就像轻量级的线程。线程由系统调度,协程由开发者控制。
  • kotlin协程本质上是对线程池的封装
    协程通过将线程切换的复杂性封装入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步性。

GlobalScope(不推荐)

  • GlobalScope.launch
    使用的是DefaultDispatcher,会自动切换到后台线程,不能做UI操作
        GlobalScope.launch {
   
        	//GlobalScope开启协程:DefaultDispatcher-worker-1
         	Log.d(TAG, "GlobalScope开启协程:" + Thread.currentThread().name)
			//子线程中此处不可以做UI操作
			//Toast.makeText(this@MainActivity, "GlobalScope开启协程", Toast.LENGTH_SHORT).show()
           
        }
  • 可以在协程中切换线程
        GlobalScope.launch {
   
        	//GlobalScope开启协程:DefaultDispatcher-worker-1
         	Log.d(TAG, "GlobalScope开启协程:" + Thread.currentThread().name)
			//子线程中此处不可以做UI操作
			//Toast.makeText(this@MainActivity, "GlobalScope开启协程", Toast.LENGTH_SHORT).show()
			withContext(Dispatchers.Main){
   
                Toast.makeText(this@MainActivity, "协程中切换线程", Toast.LENGTH_SHORT).show()
            }
        }
  • GlobalScope.launch(Dispatchers.Main)
    通过Dispatchers.Main使协程依托于主线程中,此时可以
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值