Kotlin学习教程(八)
Kotlin协程一些API启动长时间运行的操作(例如网络IO、文件IO、CPU或GPU密集型任务等),并要求调用者阻塞直到它们完成。协程提供了一种避免阻塞线程 并用更廉价、更可控的操作替代线程阻塞的方法:协程挂起。 协程通过将复杂性放入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步性。该库可以将用户代码的相关部分包装为回调、 订阅相
前言上一篇文章对协程的概念和原理、协程框架的基础使用、挂起函数以及挂起与恢复等做了详细的分析,如果您对协程有一定的理解,可以阅读《Kotlin 协程实战进阶(一、筑基篇)》我们来对协程整体认识来做一个整体的交流。由于篇幅原因还有一部分重要的知识点没有讲解到,接下来继续分析 Kotlin 协程的重要要素和使用,首先来回顾一下上篇文章的整体内容:1、Coroutine:协程的概念和原理:协程是什么以及
Kotlin协程解析协程是什么协程是什么?协程是一种在程序中处理并发任务的⽅案,也是这种⽅案的一个组件。它和线程属于一个层级的概念,是一种和线程不同的并发任务解决⽅案:一套系统(可以是操作系统,也可以是一种编程语⾔)可以选择不同的⽅案来 处理并发任务,你可以使⽤线程,也可以使⽤协程。Kotlin的协程是什么?Kotlin 的协程(确切说是 Kotlin for Java 的协程)是一个线程框架,其
转载
2023-07-28 12:13:36
353阅读
官网地址: http://www.kotlincn.net/docs/reference/coroutines/coroutines-guide.html第一次听到“协程”这两个字,立马就想到了进程和线程,看着很像,那他们之间有什么关系呢? 先看下协程相关的定义:官方描述:协程通过将复杂性放入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步性。该库可以将用户代码的相关
转载
2024-08-16 10:17:41
167阅读
NonCancellable的名字很直观,就是让被其作用的协程不可取消。比如当一个协程由于未处理异常或者其 scope 被取消了,导致其被取消,此时需要在一定时间后去释放资源,我们可以使用 try finally,在 finally 中释放资源,如果我们在 finally 中启动一个协程去等待和释放资源,会因为父协程被取消的原因而启动失败,此时就需要 NonCancellable 登场了:// C
协程是 Kotlin 中的一个重要部分,协程是一种并发设计模式,那么在了解协程之前,我们需要了解一些概念。一、什么是线程线程是一个基本的 cpu 执行单元,也是程序执行流的最小单位。Android 中会有一个主线程,也就是 UI 线程,负责界面渲染。二、什么是并发并发是指两个或多个事件在同一时间间隔内发生,这些事件宏观上是同时发生的,但微观上是交替发生的。单核 CPU 同一时刻只能执行一个程序,但
转载
2023-10-20 19:50:57
166阅读
文章目录1.协程简介2.协程异步处理3.协成关键点4.协程的本质5.协程作用域 1.协程简介协程在Kotlin中是一个很重要的概念,也是比较难理解的概念之一。那么协程到底是怎样的存在,那么接下来让我们好好地理一理。 根据官方文档的说法,它大概有一些特性:1.协程是轻量级的线程,一个线程中可以同时起成百上千的协程,而不会导致资源过度占用,造成系统崩溃。2.协程运行在线程中,协程之于线程有点类似与线
转载
2023-05-23 15:35:33
259阅读
Hi,大家好,这里是承香墨影!今天聊聊 Kotlin 的协程。协程是 Kotlin 中一个重要的特性支持,而 Kotlin 协程的支持,底层依托于虚拟机的特性。它与线程的关系,依然是 1:1 对应的。而不是类似 Go 语言这种,真的存在更小的执行体,是一种轻量级线程。Kotlin 的协程,可以理解为一种类似线程池的封装,每个协程执行的背后,都依托于一个线程。而它与线程池相比的优势,在于用更精炼的代
转载
2023-09-08 21:06:56
154阅读
我们上一篇文章解释了什么是协程并且稍微解释了一下协程原理,我们本篇文章就来给大家介绍一下Koltin协程里面的一些概念与类1 CoroutineScopeCoroutineScope 是一个接口,要是查看这个接口的源代码的话就发现这个接口里面只定义了一个属性 CoroutineContext:CoroutineScope可以理解为协程的作用域,每个 coroutine buil
转载
2024-01-17 07:00:37
140阅读
协程到目前为止没有一个具体的定义,但很多语言都有协程,但每个语言又有所不同,官方说协程基于线程,是轻量级的线程。在我看来,协程是一种趋势,它让我们从繁琐的多线程中释放出来,提高我们的编写代码的效率。为什么说这是一种趋势,就像我们之前学习的函数式编程,从最开始的面向方法编程,到面向对象编程,再到函数式编程,程序员们经历了造轮子,用轮子,再最后到的“指挥”。我把函数式编程理解为面向管理编程,因为我从中
转载
2024-07-17 10:44:54
61阅读
文章目录什么是协程?使用1.runBlocking:T2.launch:Joblaunch方法源码解析1.协程下上文2.启动模式2.协程体3.async应用1.首先定义一个请求相关的支持DSL语法的接收者。2.然后给协程定义一个扩展方法,用于Retrofit网络请求。3.最后一步,让BaseActivity实现接口CoroutineScope,这样在页面中的上下文就是协程下上文学习交流 什么是协
转载
2024-01-19 22:38:10
47阅读
1. 定义类似一种轻量级的线程。线程是依靠操作系统的调度实现不同线程切换。协程仅在编程语言层面上实现不同协程之间切换。协程实现利用依赖库: dependencies {...implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1"implementation "org.jetbrains.kotlinx:ko
原创
2023-11-24 16:55:04
88阅读
打印日志 上述操作比较复杂可以使用mainScope进行简化声明成员变量记得注销的时候注销掉还有一种写法、在activity实现 CoroutineScope 接口 并委托给 MainScope上述代码就可以简化
原创
2023-03-16 09:10:31
235阅读
简介介绍协程是一种并发设计模式,您可以在 Android 平台上使用它来简化异步执行的代码。
简单来说就是执行异步任务。参考文档谷歌开发者Kotlin文档文章目录Kotlin之协程(一)初识Kotlin之协程(二)取消优点轻量:您可以在单个线程上运行多个协程,因为协程支持挂起,不会使正在运行协程的线程阻塞。挂起比阻塞节省内存,且支持多个并行操作。内存泄漏更少:使用结构化并发机制在一个作用域内执行多
转载
2023-11-19 10:14:24
98阅读
前言 1. Kotlin协程是啥?2. Kotlin协程具体介绍 2.0 Kotlin协程的优点 2.1 添加依赖 2.2 启动协程 2.3 协程作用域(CoroutineScope) 2.4 Job(作业) 2.5 CoroutineDispatcher(调度器) 2.6
转载
2024-01-25 12:05:16
105阅读
协程是什么?协程是一种编程思想,并不局限于特定的语言。除 Kotlin 以外,其他的一些语言,如 Go、Python 等都可以在语言层面上实现协程。 Kotlin Coroutine 本质上是 Kotlin 官方提供的一套线程封装 API,其设计初衷是为了解决并发问题,让「协作式多任务」实现起来更方便。协程与线程的关系从 Android 开发者的角度去理解它们之间的关系:我们所有的代码跑在线程中,
转载
2024-04-09 21:27:18
50阅读
# Java协程 vs Kotlin协程:一位新手的入门指南
在现代开发中,处理异步编程是一项重要的技能。Java和Kotlin都支持不同的协程实现。但如何在这两者之间做出选择呢?本文将详细介绍Java协程和Kotlin协程的对比及实现步骤,帮助你理解这两种技术的使用方式。
## 1. 流程概述
在开始之前,我们先看一下实现协程的主要步骤:
| 步骤 | 任务描述
原创
2024-10-24 04:09:50
69阅读
1. 单线程调度(Main Thread)kotlin复制代码var countVar = 0fun main() = runBlocking{ val jobs = mutableListOf<Job>() val timeCost = measureTimeMillis { r
原创
2024-02-23 21:56:35
57阅读
CrotoutineName 用于为 Coroutine 命名,主要用于 debug。coroutineContext[CoroutineName] 这种写法来自于 Kotlin 对于 companion object 的简便写法,等价于 coroutineContext[CoroutineName.Key], Key 的定义为 CoroutineContext.Key<CoroutineN
SupervisorJob 用于防止直接子协程的异常导致自己和自己的其他直接子协程被取消。我们看一下这段代码:fun main() {
val commonCoroutineScope = CoroutineScope(CoroutineName("non-SupervisorJob"))
val supervisorJobCoroutineScope = CoroutineSco