• 协程(四)——Android中使用协程


    上一篇讲了协程在并发中的使用,及其优势,链接放下面,有兴趣的可以去看看

    协程(三)——协程在并发中的优势_水很清的博客-CSDN博客

    这篇文章我们来讲讲协程在Android 中的使用,其实用法更kotlin是一样的,感觉说了句废话,因为按照开发如果是使用kotlin语言的话,只要kotlin语言版本在1.3之后的,都具备协程功能。

    还有一点是,需要添加一些依赖库,比如协程核心库、协程Android支持库、协程Java8支持库、以及lifecycle对于协程的扩展库。

    1. // Kotlin
    2. implementation "org.jetbrains.kotlin:kotlin-stdlib:1.4.32"
    3. // 协程核心库
    4. implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.3"
    5. // 协程Android支持库
    6. implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.3"
    7. // 协程Java8支持库
    8. implementation "org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.4.3"
    9. // lifecycle对于协程的扩展封装
    10. implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
    11. implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.2.0"
    12. implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0"

    其中lifecycle对于协程的扩展库,主要是扩张Jetpack库,也就是我们前面文章讲到的,lifecycleScope跟viewModelScope,只有添加lifecycle对于协程的扩展库,才可以使用lifecycleScope跟viewModelScope

    而对于lifecycleScope跟viewModelScope的使用,方法基本跟CoroutineScope一样,只不过是我们不需要去管理它们的生命周期,他们自动绑定了生命周期,当activityfragment 销毁的时候,自动cancel掉。

    lifecycleScope、viewModelScope的我多说几句,在activityfragment中我们使用lifecycleScope,在viewModel中我们使用viewModelScope,用法两者一样,下面会给出例子

    两者都可以在协程中调用withContext 或者 async(Dispatchers.IO){}。调用await函数(此函数为可挂起函数,等待IO线程结束,并返回执行结果),使用withContext时不需要await,因为withContext就是可挂起函数

    他们的作用有一下几点:

    1.普通异步处理,直接在协程中使用可挂起函数即可,无需切换到子线程
    2.网络请求任务必须切换子线程,网络请求任务必须在子线程中执行,当然协程中也不例外!只不过它可以实现挂起而不阻塞主线程
    3.async+await 约等于withContext
    4.切换线程中任务执行完毕以后,协程会将线程自动切回原线程

    1. lifecycleScope.launch{
    2. val io = async(Dispatchers.IO){
    3. //网络请求
    4. //IO线程
    5. }
    6. io.await()
    7. //主线程
    8. //刷新UI
    9. }

    关于协程在Android中的使用就将这么多了,基本该讲的内容很多都在之前的文章讲过了,具体需求具体应用,我们只要知道的是,协程的特点及作用就行。

    还是那两句话

    用同步的方式去表达异步,这一点体现在并发上

    协程异步就是将耗时的函数标记为suspend,并在协程中调用!不需要开启新线程,不会阻塞UI。

     that‘s all.

  • 相关阅读:
    深分页优化总结
    糟了,线上服务出现OOM了
    Java面试题:为什么HashMap不建议使用对象作为Key?
    【数据结构与算法】一文带你学透——算法分析
    策略验证_指标买点分析技法_运用boll布林线指标选择买点
    jmeter5.4.1源码编译(IDEA)问题解决
    linux usb驱动移植(1)
    Vue-3.2自定义创建项目
    利用datafaker批量生成测试数据
    Python&C++相互混合调用编程全面实战-29导入pyffmpeg扩展库完成视频的打开
  • 原文地址:https://blog.csdn.net/taoyuxin1314/article/details/126461268