kotlin 协程视频讲解,不只视频

从零开始学安卓(kotlin)十一——Jetpack 目录ViewModelLiveData ViewModel 添加依赖 implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" 比较好的编程规范是给每一个Activity和Fragment都创建一个对应的ViewModel import androidx.lifecycle.ViewModel class MainViewModel(countReserved: Int) : ViewModel() { var counter 阅读详情

学不会协程?很可能因为你看过的教程都是错的——Kotlin 的协程「用力瞥一眼」https://www.bilibili.com/video/BV164411C7FK?t=613

Kotlin 协程的挂起好神奇好难懂?今天我把它的皮给扒了 https://www.bilibili.com/video/BV1KJ41137E9?t=132 

到底什么是「非阻塞式」挂起?协程真的比线程更轻量级吗?https://www.bilibili.com/video/BV1JE411R7hp 

Kotlin Jetpack 实战 | 09. 图解协程:suspend https://juejin.im/post/6883652600462327821 

协程

  • Kotlin 协程,不是操作系统级别的概念,无需操作系统支持
  • Kotlin 协程,有点像上面提到的“绿色线程”,一个线程上可以运行成千上万个协程
  • Kotlin 协程,是用户态的(userlevel),内核对协程无感知
  • Kotlin 协程,是协作式的,由开发者管理,不需要操作系统进行调度和切换,也没有抢占式的消耗,因此它更加高效
  • Kotlin 协程,它底层基于状态机实现,多协程之间共用一个实例,资源开销极小,因此它更加轻量
  • Kotlin 协程,本质还是运行于线程之上,它通过协程调度器,可以运行到不同的线程上

有的人会将协程比喻成:线程的封装框架。从宏观角度看,这十分贴切。

高效和轻量,都不是 Kotlin 协程的核心竞争力。

Kotlin 协程的核心竞争力在于:它能简化异步并发任务。

从上面的动画,我们能知道:

  • 表面上看起来是同步的代码,实际上也涉及到了线程切换。
  • 一行代码,切换了两个线程。
  • =左边:主线程
  • =右边:IO线程
  • 每一次从主线程IO线程,都是一次协程挂起(suspend)
  • 每一次从IO线程主线程,都是一次协程恢复(resume)。
  • 挂起和恢复,这是挂起函数特有的能力,普通函数是不具备的。
  • 挂起,只是将程序执行流程转移到了其他线程,主线程并未被阻塞。
  • 如果以上代码运行在 Android 系统,我们的 App 是仍然可以响应用户的操作的,主线程并不繁忙,这也很容易理解。

suspend 的本质,就是 CallBack

suspend fun getUserInfo(): String {
    withContext(Dispatchers.IO) {
        delay(1000L)
    }
    return "BoyCoder"
}

有的小伙伴要问了,哪来的 CallBack?明明没有啊。确实,我们写出来的代码没有 CallBack,但 Kotlin 的编译器检测到 suspend 关键字修饰的函数以后,会自动将挂起函数转换成带有 CallBack 的函数。

如果我们将上面的挂起函数反编译成 Java,结果会是这样:

//                              Continuation 等价于 CallBack
//                                         ↓         
public static final Object getUserInfo(Continuation $completion) {
  ...
  return "BoyCoder";
}

以上这个从挂起函数转换成CallBack 函数的过程,被称为:CPS 转换(Continuation-Passing-Style Transformation)。

 

小结

  • suspend 修饰的函数就是挂起函数
  • 挂起函数,在执行的时候并不一定都会挂起
  • 挂起函数只能在其他挂起函数中被调用
  • 挂起函数里包含其他挂起函数的时候,它才会真正被挂起

首先,我们只需要把握住 Continuation 的词源 Continue 即可。Continue 是继续的意思,Continuation 则是继续下去要做的事情,接下来要做的事情

放到程序中,Continuation 则代表了,程序继续运行

深入解析Kotlin 协程与 JetPack 组件 可以使用单一实例模式扩展 LiveData 对象以封装系统服务,以便在应用中共享它们。相关链接:https://developer.android.google.cn/topic/libraries/architecture/livedata4、Kotlin协程=============================================================================4.1、异步的本质什么是异步?异步就是同时进行一个以上彼此目的不同的任务。但是对于有前后依赖关系 阅读详情

相关推荐

Jetpack 与 Kotlin 协程:异步编程的完美结合

本文旨在全面解析 Jetpack 组件与 Kotlin 协程的集成方式,帮助 Android 开发者掌握如何利用这一强大组合简化异步编程。我们将覆盖从基础概念到高级用法的完整知识体系,重点分析协程在 Jetpack 各组件中的最佳实践。文章首先介绍核心概念,然后深入分析协程与各 Jetpack 组件的集成方式,接着通过实际案例展示具体实现,最后讨论未来发展趋势和常见问题解答。Jetpack: Google 推出的一套 Android 开发组件集合,旨在简化常见开发任务Kotlin 协程

移动开发前沿的博客 1268

Jetpack基本框架搭建(kotlin)

JetPack初步使用 ViewModel 使用到 LiveData 以及 LiveData中使用到的 map和switchmap | Room 储存 以及 sql操作数据 | WorkManager的使用方法

Kotlin协程异常处理的全方位探索:解锁音视频时代的NDK开发能力

本文详细介绍了如何在Kotlin协程中全方位处理异常,并展示了如何结合NDK开发来实现音视频相关功能。本文将深入探讨如何在Kotlin协程中全方位处理异常,并展示如何结合NDK开发来实现音视频相关功能。希望本文对你在Kotlin协程异常处理和NDK开发方面有所启发,并能帮助你在音视频时代的Android开发中取得更好的成果。通过异常处理器,我们可以集中处理协程中出现的异常,而不必在每个协程中都编写try-catch块。Kotlin协程提供了一个异常处理器的概念,它可以用于在协程中统一处理异常。

pytorchCode的博客 143

php 数组合并_如何用PHP将两个数组合并

本篇文章主要给大家介绍PHP怎么实现两个数组合并,并且其中一个数组的值为下标,另一个数组的值为对应的值。PHP进行普通数组的合并,相信大家都已经有所掌握。但是对于新手朋友们来说,合并两个数组,新数组的下标和值分别是合并前的两个数组值。这种数组合并的处理情况,可能有一点难度。其实也是非常容易实现的。下面我们就结合简单的代码示例给大家讲解。代码如下:<?结果如下图:如图,这里就是一个新的数组,第...

weixin_39785723的博客 1116

Kotlin协程极简入门与解密

Kotlin作为目前最为流行的编程语言之一,学Kotlin的同学们都被Kotlin的简洁的语法和它强大函数式编程所折服,但是学习Kotlin总会有一个绕不开的话题就是“协程”,它已经成了目前Kotlin学习中的一个网红话题,很多文章都在讲协程,有人讲它是来替代线程的,有人讲他就是类似Java中Executors,是一个线程管理框架仅此而已,是这样的吗?那么通过本视频教程将一步步揭开协程的神秘面纱,通过本课程学习我们可以知道什么是协程,什么是协程的挂起,什么是非阻塞挂起,以及协程API的使用,最后在解密协程背后的工作原理,让你轻松的掌握协程,认清他的本质,在并发编程中助你一臂之力。

Kotlin协程视频教程,极简入门与解密

Kotlin协程极简入门与解密视频教程已经发布到CSDN学院: https://edu.csdn.net/course/detail/31728 Kotlin作为目前最为流行的编程语言之一,学Kotlin的同学们都被Kotlin的简洁的语法和它强大函数式编程所折服,但是学习Kotlin总会有一个绕不开的话题就是“协程”,它已经成了目前Kotlin学习中的一个网红话题,很多文章都在讲协程,有人讲它是来替代线程的,有人讲他就是类似Java中Executors,是一个线程管理框架仅此而已,是这样的吗?那么通过本视

门心叼龙的专栏 2275

【码上开学】学不会协程?很可能因为你看过的教程都是错的——Kotlin协程「用力瞥一眼」...

大家好,我是扔物线朱凯。终于到了协程的一期了。Kotlin协程是它非常特别的一块地方:宣扬它的人都在说协程多么好多么棒,但多数人不管是看了协程的官方文档还是一些网络文...

HenCoder 527

Kotlin 和 Jetpack 视频合集 | MAD Skills

在近期完成的一系列 Modern Android Development (简称 MAD Skills) 的视频和文章中,我们重点关注了 Kotlin 和 Jetpack。我们介绍了多种不同的方法,让 Android 代码更具表现力、更简洁、更安全以及更易于使用 Kotlin 运行异步代码。 您可以观看下面 6 个视频,提升您对 Kotlin 和 Jetpack 的了解。每一集都涵盖一组特定 API,既讲述了如何使用 API,也展示了 API 的工作原理。每个视频都配有博文,其中大部分都会链接一个示例或 .

谷歌开发者 431

Kotlin协程超时处理:withTimeout的使用场景

在Android开发中,网络请求、文件下载等耗时操作经常需要设置超时机制以避免程序无响应。Kotlin协程(Coroutine)提供了`withTimeout`函数,能够优雅地处理超时场景。本文以开源项目[Seal](https://link.gitcode.com/i/42f6935752dfc95ac8edbf815270b96c)(一款基于yt-dlp的Android音视频下载器)为例,详细...

gitblog_00150的博客 1061

揭秘Kotlin视频播放卡顿难题:3步实现丝滑流畅播放体验

解决Kotlin视频播放卡顿问题,提升用户体验。本文介绍基于MediaPlayer与ExoPlayer的3步优化方案,适用于点播与直播场景,实现高效缓冲、无缝切换与低延迟播放。显著提升流畅度与加载速度,Kotlin视频播放优化实战技巧,值得收藏。

LearnPlex的博客 746

01-01-03 协程取消与异常处理完全指南

本文全面介绍了Kotlin协程的取消与异常处理机制。主要内容包括: 协程取消机制:通过cancel()/cancelAndJoin()方法取消协程,取消是协作式的,需检查isActive或调用ensureActive() 取消响应方式:提供三种检查取消状态的方法(isActive、yield()、ensureActive()) 取消传播特性:父协程取消会自动传播到所有子协程 异常处理:介绍CoroutineExceptionHandler和SupervisorJob的使用场景 实战建议:给出了取消检查、异常

时代我西的博客 387

安卓开发实战:打造全能在线视频播放器应用

Android SDK是开发Android应用必不可少的工具集合。它包含了一系列用于构建Android应用的API、库和工具。SDK的工具链为开发者提供了从编码、构建、测试到调试和优化的全过程支持。Android SDK中的重要工具包括::用于下载和更新SDK组件,比如平台工具、构建工具和不同版本的Android平台。:用于创建和管理虚拟设备,模拟真实设备进行应用测试。adb(Android Debug Bridge):是一个命令行工具,用于与Android模拟器或真实设备通信。

weixin_29443363的博客 777

01-01-02 协程作用域与生命周期完全指南

协程作用域(CoroutineScope)定义了协程的生命周期边界,管理协程的创建、取消和完成。/*** 协程作用域基础*/// 作用域的本质// 创建基础作用域// 取消作用域// 作用域控制生命周期delay(500)it")scope.cancel() // 取消所有协程/*** 自定义协程作用域*/// 方式1: 实现CoroutineScope接口launch {// 方式2: 使用委托// 方式3: MainScope/*** 自定义作用域的配置*/

时代我西的博客 403

Eyepetizer测试驱动开发:单元测试与UI测试完整教程

Eyepetizer是一个基于Kotlin语言仿写「开眼 Eyepetizer」的短视频Android客户端项目,采用Jetpack + 协程实现的MVVM架构。本教程将为你详细介绍如何在Eyepetizer项目中实施测试驱动开发,包括单元测试与UI测试的完整流程和最佳实践。 ## 测试环境配置 要开始在Eyepetizer项目中进行测试,首先需要确保测试环境已经正确配置。在项目的`app/b

gitblog_00333的博客 896

Kotlin进阶必读:深入理解Kotlin协程

新书速递Kotlin协程现在是一个很大的麻烦,国内外都没有很好的资料,官方文档又过于精练,不太适合大家入门和进阶。今天为大家推荐一本新书《深入理解Kotlin协程》,作者是Kotli...

华章IT官方博客 2599

Android开发必须掌握!史上最全源码解读,别再说你不知道HashMap原理!使用指南

这篇文章主要介绍了20道经典Handler题及答案解析,文中通过示例代码介绍的非常详细,对大家的学习或者面试复习具有一定的参考学习价值,内容过多可以先收藏慢慢观看,需要的朋友们下面随着小编来一起学习学习吧。 另外各位观众老爷觉得内容还可以的,请给个赞和评论,你的点赞和评论是我最大的动力,谢谢! 面试总结 面试大厂一定要做好充分的准备,没有准备就去面试完全是去当炮灰的,更是对自己的不负责。再就是基础真的很重要,基础,基础,基础,重要的事说3遍。 下面给大家分享下我在面试美团之前复习整理的一些面试题及解析,.

fanzhang_vip0723的博客 115

kotlin 协程也有并发?

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!

2401_84903082的博客 943

Kotlin 协程真的比 Java 线程更高效吗?

本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/-OcCDI4L5GR8vVXSYhXJ7w 作者:吴越 网上几乎全部介绍Kotlin的文章都会说Kotlin协程是多么的高效,比线程性能好很多,然而事情的真相真是如此么? 协程的概念本身并不新鲜,使用C++加上内嵌汇编,一个基本的协程模型50行代码之内就可以完全搞出来。早在2013...

vivo互联网技术 2789
上一篇: Android app 后台被杀恢复
下一篇: android emoji吏上最全的详解
赵小龙_同学
博客等级 码龄9年 3粉丝 41原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值