kotlin协程初步理解

kotlin协程理解

初步认知

  1. kotlin协程是一个线程库;替代方案有:AsyncTask、Handler+线程池、RxJava
  2. 和其他方案相比kotlin协程的优势:
  • 轻量:其他的多任务异步方案的最小单位是线程,协程是在线程之上的,可以共享线程,最大程度的复用,消耗少量的资源可以创建大量的协程
  • 便于管理控制:支持协程取消和结构性并发,统一作用域管理

为什么要使用kotlin中协程

  1. 先来看看不用协程,实现网络加载一个列表数据异步任务
    private fun loadData1() {
        loadListData1 {
            runOnUiThread {
                show.text = it.toString();
            }
        }
    }
    private fun loadListData1(callback: (dataList: List<String>) -> Unit) {
        Thread {
            Thread.sleep(2000)//模拟网络耗时
            callback.invoke(mutableListOf<String>().apply {
                add("item1")
                add("item2")
                add("item3")
            })
        }.start()
    }

可以看到主业务逻辑代码有两层嵌套(使用java 嵌套会更多),单个简单的业务请求还不是很明显,如果业务复杂,回调地狱就很明显,不好维护
2. 使用kotlin协程来实现

    var mainScope = MainScope();
    private fun loadData2() {
        mainScope.launch {
            val loadListData = loadListData2()
            show.text = loadListData.toString();
        }

    }
    private suspend fun loadListData2(): List<String> = withContext(Dispatchers.IO) {
        Thread.sleep(2000)//模拟网络耗时
        mutableListOf<String>().apply {
            add("item1")
            add("item2")
            add("item3")
        }
    }

可以看到使用kotlin协程实现的代码,主业务逻辑代码很清晰,相当于写单任务的同步代码

kotlin中协程中有什么

kotlin协程中类

类/接口作用
CoroutineScope它是协程的作用域,用于控制协程的生命周期
CombinedContext提供协程启动和运行时需要的信息
Dispatchers指定协程运行的线程(IO、Default、Main、Unconfined)
CoroutineStart指定协程的启动模式,它是一个枚举值,默认是立即启动,也通过指定CoroutineStart.LAZY变为延迟启动 ,延迟启动需要你主动调用返回的Job对象的start方法后协程才会启动

Android 中怎么使用协程

通过自定义CoroutineScope,可以在应用程序的某一个层次开启或者控制协程的生命周期,例如Android,在ViewModel和Lifecycle类的生命周期里提供了CoroutineScope,分别是ViewModelScope和LifecycleScope.

揭秘Kotlin协程中的CoroutineContext

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值