IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Kotlin之协程(一)初识 -> 正文阅读

[移动开发]Kotlin之协程(一)初识

简介

介绍

	协程是一种并发设计模式,您可以在 Android 平台上使用它来简化异步执行的代码。
简单来说就是执行异步任务。

参考文档

  1. 谷歌开发者
  2. Kotlin文档

优点

  1. 轻量:您可以在单个线程上运行多个协程,因为协程支持挂起,不会使正在运行协程的线程阻塞。挂起比阻塞节省内存,且支持多个并行操作。
  2. 内存泄漏更少:使用结构化并发机制在一个作用域内执行多项操作。
  3. 内置取消支持:取消操作会自动在运行中的整个协程层次结构内传播。
  4. Jetpack 集成:许多 Jetpack 库都包含提供全面协程支持的扩展。某些库还提供自己的协程作用域,可供您用于结构化并发。

协程之HelloWorld实现

依赖引入

   implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.0'
   implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'

代码实现

GlobalScope.launch {
    delay(1000)
    Log.d(Constants.TAG,"World")
}
Log.d(Constants.TAG,"Hello")

效果

先输出Hello,协程延迟一秒输出World,打印日志如下:

2021-08-26 13:50:00.207 26316-26316/demo.demo.democoroutines D/Coroutines: Hello
2021-08-26 13:50:01.230 26316-26754/demo.demo.democoroutines D/Coroutines: World

协程之结构化的并发

	结构化并发,听起来感觉不是太好理解,其实主要是为了实现对协程的管理。如果我们任意地
	去启动协程而不做管理会出现如我们不需要了,但是我们没有引用与取消,协程还在运行等
	诸如此类的问题。结构化并发主要是通过创建顶级协程进行协程任务的统一管理,当然这属
	于个人通俗的理解,如有问题或者有什么其他的看法,欢迎指出与讨论。

代码实现

主要是通过 runBlocking等协程构建器将函数转换为协程,方法的调用和常规调用一直

   private fun test()= runBlocking {

      val job = GlobalScope.launch {
          repeat(100){
              delay(1000)
              Log.d(Constants.TAG,"协程打印:$it")
          }
      }
        delay(5*1000)
        job.cancel()

    }

协程之取消

进行循环一百次打印(每次延迟1s),在5s之后取消。

代码实现
private fun test()= runBlocking {
      val job = GlobalScope.launch {
          repeat(100){
              delay(1000)
              Log.d(Constants.TAG,"协程打印:$it")
          }
      }
        delay(5*1000)
        job.cancel()
    }
效果

可以看到打印了4次,到第5次打印的时候取消了任务不能再进行打印

2021-08-26 14:20:50.853 29331-29384/demo.demo.democoroutines D/Coroutines: 协程打印:0
2021-08-26 14:20:51.855 29331-29384/demo.demo.democoroutines D/Coroutines: 协程打印:1
2021-08-26 14:20:52.858 29331-29384/demo.demo.democoroutines D/Coroutines: 协程打印:2
2021-08-26 14:20:53.865 29331-29384/demo.demo.democoroutines D/Coroutines: 协程打印:3

协程之Join

join函数作用

主要是实现占用执行,执行完毕之后再进行其他协程任务的执行

下面对比两种效果看下join的作用

代码实现1
private fun test()= runBlocking {
        
        GlobalScope.launch {
            delay(500)
            Log.d(Constants.TAG,"job-test")
        }

        GlobalScope.launch {
            delay(1000)
            Log.d(Constants.TAG,"World")
        }
        Log.d(Constants.TAG,"Hello")

    }
效果1

打印日志如下(可以看出job-test穿插在helloworld中间执行):

2021-08-26 14:06:08.607 27747-27747/demo.demo.democoroutines D/Coroutines: Hello
2021-08-26 14:06:09.133 27747-27807/demo.demo.democoroutines D/Coroutines: job-test
2021-08-26 14:06:10.578 27747-27807/demo.demo.democoroutines D/Coroutines: World
代码实现2
 private fun test()= runBlocking {
        
        val job = GlobalScope.launch {
            delay(500)
            Log.d(Constants.TAG,"job-test")
        }
        job.join()

        GlobalScope.launch {
            delay(1000)
            Log.d(Constants.TAG,"World")
        }
        Log.d(Constants.TAG,"Hello")

    }
效果

打印日志如下(可以看出helloworld在job-test执行完毕之后才进行执行):

2021-08-26 14:16:01.914 28884-28927/demo.demo.democoroutines D/Coroutines: job-test
2021-08-26 14:16:01.916 28884-28884/demo.demo.democoroutines D/Coroutines: Hello
2021-08-26 14:16:02.919 28884-28927/demo.demo.democoroutines D/Coroutines: World

总结

	本文主要对协程的概念、优点及使用做了相关的介绍,实现了简单的协程编程,如HelloWorld
、结构化编程、取消、Join等,记录自己的学习与理解的相关内容,当然希望也能对大家有
那么一点点的帮助或者启发,我就很开心了。当然了本人也是在学习与理解的过程中记录与理解
难免有一定的认知局限性,如果发现有什么问题,欢迎指正,谢谢。
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 11:58:42  更:2021-08-27 12:01:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 6:21:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码