kotlin协程

该文章探讨了在Kotlin中使用协程进行异步操作的方法,通过`viewModelScope.launch`启动协程,并在`mainTest()`方法中展示了如何在协程中调用挂起函数和普通函数。`b()`函数内部使用`coroutineScope`和`launch(IO)`创建了一个新的线程来执行延迟操作,同时保持主线程的响应性。
摘要由CSDN通过智能技术生成

https://www.jianshu.com/p/0aaf300ac0fe?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
在这里插入图片描述

fun getBannerData() {
    viewModelScope.launch(IO) {
        Log.i("zc_test", "11111 current thread is ${Thread.currentThread()}")
        withContext(Main) {
            Log.i("zc_test", "22222 current thread is ${Thread.currentThread()}")
        }
        Log.i("zc_test", "33333 current thread is ${Thread.currentThread()}")
    }
}
2019-12-19 15:40:51.786 14920-15029/com.chendroid.learning I/zc_test: 11111 current thread is Thread[DefaultDispatcher-worker-3,5,main]

2019-12-19 15:40:51.786 14920-14920/com.chendroid.learning I/zc_test: 22222 current thread is Thread[main,5,main]

2019-12-19 15:40:51.789 14920-15029/com.chendroid.learning I/zc_test: 33333 current thread is Thread[DefaultDispatcher-worker-3,5,main]

launch
在这里插入图片描述

suspend
在这里插入图片描述
测试:

fun test {
    viewModelScope.launch {
        println("viewModelScope.launch ${Thread.currentThread()}")
        mainTest()
        println("viewModelScope.launch 结束了 ${Thread.currentThread()}")
    }
    
    test2()
}
...
// mainTest() 方法
suspend fun mainTest() {
    println("mainTest() start start start " + Thread.currentThread())
    a()
    b()
    c()
    println("mainTest() end end end" + Thread.currentThread())
}

// 普通函数 test2()
fun test2() {
    println("test2() doing doing doing " + Thread.currentThread())
}
//普通函数 a() 
fun a() {
    println("a() doing doing doing " + Thread.currentThread())
}
//普通函数 c() 
fun c() {
    println("c() doing doing doing " + Thread.currentThread())
}
// 挂起函数 b()
suspend fun b() {
    println("b() start start start" + Thread.currentThread())
    coroutineScope {
        println("11111 线程 是" + Thread.currentThread())
        launch(IO) {
           println("22222 线程 是" + Thread.currentThread())
           delay(1000)
           println("22222 线程结束" + Thread.currentThread())
        }
        println("33333 线程 是" + Thread.currentThread())
    }
    println("b() end end end" + Thread.currentThread())
}
I/System.out: viewModelScope.launch Thread[main,5,main]
I/System.out: mainTest() start start start Thread[main,5,main]
    a() doing doing doing Thread[main,5,main]
    b() start start startThread[main,5,main]
I/System.out: 11111 线程 是Thread[main,5,main]
I/System.out: 33333 线程 是Thread[main,5,main]
I/System.out: 22222 线程 是Thread[DefaultDispatcher-worker-2,5,main] 「标注 1」
I/System.out: test2() doing doing doing Thread[main,5,main]         「标注 2」
I/System.out: 22222 线程结束Thread[DefaultDispatcher-worker-9,5,main]
I/System.out: b() end end endThread[main,5,main]
    c() doing doing doing Thread[main,5,main]
    mainTest() end end endThread[main,5,main]
    viewModelScope.launch 结束了 Thread[main,5,main]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值