首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin Vocabulary | 揭秘的 suspend 修饰符

Kotlin 把 suspend 修饰符引入到了我们 Android 开发者的日常开发。您是否好奇它的底层工作原理呢?编译器是如何转换我们的代码,使其能够挂起和恢复操作的呢?...本文概要: Kotlin 编译器将会为每个挂起函数创建一个状态机,这个状态机将为我们管理的操作!...ko… 的进阶使用: Kotlin Flow 和 Live Data codelabs.developers.google.com/codelabs/ad… 101 简化了 Android...正如官方文档《利用 Kotlin 提升应用性能》所介绍的,我们可以使用管理那些以往可能阻塞主线程或者让应用卡死的异步任务。 也可以帮我们用命令式代码替换那些基于回的 API。...此时,编译器只需要添加如何在状态之间切换的信息。 首先需要知道的是: 函数是第一次被调用; 函数已经从前一个状态恢复。

2.2K10

Kotlin 底层实现 ① ( Kotlin 分层架构 | 基础设施层 | 业务框架层 | 使用 Kotlin 基础设施层标准库 Api 实现 )

文章目录 一、Kotlin 分层架构 二、使用 Kotlin 基础设施层标准库 Api 实现 一、Kotlin 分层架构 ---- Kotlin 分层架构 : 在 Kotlin ...包下 ; import kotlin.coroutines.* 业务框架层 : 如果调用 常见的 Api , 调用的是 业务框架层 的 Api , GlobalScope , launch ,...Java 的匿名内部类 ) 作为参数 ; 对象表达式 object : Continuation Continuation 后的 泛型 表示的是体的返回值类型 ; 执行完毕后..., 将执行结果返回 , 此时会回 override fun resumeWith(result: Result) 函数 ; // 创建 // 注意只是创建, 创建后还需要调用 resume...常见的 Api , 调用的是 业务框架层 的 Api , GlobalScope , launch , Dispatchers 等 , 都定义在 kotlinx.coroutines.* 包下

77410
您找到你想要的搜索结果了吗?
是的
没有找到

饿了么资深Android工程师带你领略Kotlin的力量

本次分享将通过一个小案例展示kotlin是如何应用的,以及如何在现有项目中引入。 获取嘉宾演讲视频及PPT,扫一扫下方二维码即可。 ?...setText方法的launch中有一个UI参数,这是Kotlin提供的对象,表示在UI线程启动,同时被中断以后的恢复也是在UI线程。...因此Kotlin库提供了一个关键字suspend,表示挂起指出该方法是一个方法不是直接运行在UI线程。...Continuation是在代码上的映射,它本质上是个接口,Kotlin每个协体都实现了这个接口。仔细看下该接口内部的代码就会发现这就是一个回接口。...这里回的时候又进一步调用接口continuation的resume方法和resumeWithException方法。

2.3K51

Kotlin 】Flow 异步流 ① ( 以异步返回返回多个返回值 | 同步调用返回多个值的弊端 | 尝试在 sequence 调用挂起函数返回多个返回值 | 调用挂起函数返回集合 )

文章目录 一、以异步返回返回多个返回值 二、同步调用返回多个值的弊端 三、尝试在 sequence 调用挂起函数返回多个返回值 四、调用挂起函数返回集合 一、以异步返回返回多个返回值 ----...在 Kotlin Coroutine , 使用 suspend 挂起函数 以异步的方式 返回单个返回值肯定可以实现 , 参考 【Kotlin 的挂起和恢复 ① ( 的挂起和恢复概念...| 的 suspend 挂起函数 ) 博客 ; 如果要 以异步的方式 返回多个元素的返回值 , 可以使用如下方案 : 集合 序列 Suspend 挂起函数 Flow 异步流 二、同步调用返回多个值的弊端...AnnotationTarget.CLASS) @Retention(AnnotationRetention.BINARY) public annotation class RestrictsSuspension 四、调用挂起函数返回集合...---- 如果要 以异步方式 返回多个返回值 , 可以在调用挂起函数返回集合 , 但是该方案只能一次性返回多个返回值 , 不能持续不断的 先后 返回 多个 返回值 ; 代码示例 : package

8.2K30

Android Compose开发

另外,@Composable 函数也可以调用普通函数,而普通函数却不能直接调用@Composable 函数。 这里可以类比下 kotlin suspend 挂起函数的用法,其用法是相似的。...您可以使用修饰符来执行以下操作: 更改可组合项的大小、布局、行为和外观 添加信息,如无障碍标签 处理用户输入 添加高级互动,使元素可点击、可滚动、可拖动或可缩放 修饰符是标准的 Kotlin 对象。...,用于在执行副作用操作。...LaunchedEffect 函数是一个构建器,它接受一个或多个参数,并在代码块执行异步操作。它会自动在适当的时间启动和取消协,确保在 Compose 组件的生命周期内正确处理副作用。...总结起来,LaunchedEffect 是一个用于在执行副作用操作的函数,它确保在 Compose 组件的生命周期内正确处理副作用。

23910

Android的7个必要知识点

上下文与调度器: 理解上下文的概念,包括调度器(Dispatcher)的作用,如何在不同的线程上执行代码。 挂起函数: 掌握挂起函数的概念,以及如何在调用和编写挂起函数。...间通信: 掌握间通信的方法,使用通道(Channel)进行数据交换和协间的协作。 在UI线程的使用: 学会在Android应用中使用来处理UI操作,避免阻塞主线程。...下面将详细介绍挂起函数的概念,以及如何在调用和编写挂起函数,并学会处理异常和错误。...suspend fun fetchUserData(): UserData { // 执行异步操作,等待数据返回 } 在调用挂起函数 在内部调用挂起函数是直接的,你可以像调用普通函数一样调用挂起函数...下面将深入介绍如何使用来处理并发任务和顺序性操作,以及如何在不同的场景组合多个协的执行流程。 并发任务 使并发任务的管理变得非常直观。

49452

在 Android 开发中使用 | 背景介绍

其实,是 Kotlin 提供了这种执行代码而不阻塞主线程的方法。 在常规函数的基础上新增了两项操作。...Kotlin 通过新增 suspend 关键词来实现上面这些功能。您只能够在 suspend 函数调用另外的 suspend 函数,或者通过构造器 ( launch) 来启动新的。...使用保证主线程安全 在 Kotlin,主线程调用编写良好的 suspend 函数通常是安全的。不管那些 suspend 函数是做什么的,它们都应该允许任何线程调用它们。...在 Kotlin ,所有都必须在调度器运行,即使它们是在主线程上运行也是如此。可以自行暂停,而调度器负责将其恢复。...类似于 Retrofit 和 Volley 这样的网络库会管理它们自身所使用的线程,所以当您在 Kotlin 调用这些库的代码时不需要专门来处理主线程安全这一问题。

1.5K30

Android面试题之Kotlin 的挂起、执行和恢复过程

挂起点:挂起的位置,这个位置通常是代码的一个挂起点(suspend函数)。 调用栈:它对应当前执行的堆栈帧,可以看作是对函数调用链的保存。...2.2 Continuation Kotlin的挂起函数实质上会被编译器转换成带有回的 Continuation 对象。...挂起后切换到其他线程执行 当遇到挂起点( delay, await 等 suspend 函数)时,它会触发挂起机制,具体步骤如下: 3.1 挂起点的处理 当在挂起点被挂起时,当前函数状态和局部变量会被保存到...在其他线程执行完后的通知机制 5.1 异步任务完成通知 当在新的线程执行完任务(比如完成网络请求等异步任务)时,执行环境会调用 Continuation 的 resumeWith 方法: continuation.resumeWith...总结 综上所述,Kotlin 在挂起和恢复过程,通过调度器实现线程的切换和任务调度: 挂起点保存当前状态由Continuation管理。 调度器控制挂起后的线程控制权交还。

8810

使用和 Flow 简化 API 设计

如果您是库作者,您也许希望用户在使用 Kotlin 与 Flow 时可以更加轻松地调用您基于 Java 或回的 API。...在 Kotlin ,您可以简单地使用调用,但前提是您必须创建您自己的适配器。 创建您自己的适配器 如果没有找到适合您用例的适配器,更直接的做法是自己编写适配器。...当 Continuation 对象的 resume 或 resumeWithException 方法被调用时,会被恢复执行。...有关 Continuation 的更多信息,请参阅: Kotlin Vocabulary | 揭秘的 suspend 修饰符。...这里会挂起 //直到某个回调调用了 continuation 参数 } 注意: 尽管同样包含了不可取消版本的构建器 (即 suspendCoroutine),但最好始终选择使用

1.6K20

Google 推荐在 MVVM 架构中使用 Kotlin Flow

Kotlin Flow 是什么? Kotlin Flow 解决了什么问题? Kotlin Flow 如何在 MVVM 中使用?...的扩展,让我们可以像运行同步代码一样运行异步代码,使得代码更加简洁,提高了代码的可读性 易于做单元测试 Kotlin Flow 如何在 MVVM 中使用 Jetpack 的视图模型 MVVM 架构由...fetchPokemonInfo(@Path("name") name: String): NetWorkPokemonInfo 如上所见在方法前增加了用 suspend 进行了修饰,只有被 suspend 修饰的方法,才可以在调用...{ ... } 执行代码 collect 是末端操作符,收集 Flow 在 Repositories 层发射出来的数据 最后调用 LiveData 的 emit() 方法更新 LiveData...(coroutine builder) 提供的代码块,产生的是一个不可变的 LiveData,处理方式 同方法一,在 Activity 或者 Fragment 调用这个不可变的 LiveData

4.1K20

Kotlin系列(一)

,不妨称作协体   参数completion会在执行完成后调用,也就是的完成回   函数的返回值是一个Continuation对象,其实也是指我们的体,只是套上了一层壳,挂起后的恢复执行...(4)函数的挂起   我们已经知道使用suspend关键字可以声明一个挂起函数,挂起函数只能在体内或其他挂起函数调用。这样一来,整个kotlin语言体系就可以分为两派:普通函数和挂起函数。...其中挂起函数可以调用任何函数,普通函数只能调用普通函数。   但是,需要注意的是,挂起函数不一定真的会挂起,只是提供了挂起的条件。那什么时候才会挂起呢?...(6)的拦截器   我们现在已经知道Kotlin可以通过调用挂起函数实现挂起,可以通过Continuation的恢复调用实现恢复,还知道可以通过绑定一个上下文来设置一些数据来丰富的能力,...答案就是通过拦截器,它可以拦截异步回时的恢复调用,那么想要操纵线程的调度应该不是什么难事。

20110

写给Android工程师的指南

面对复杂的业务逻辑,比如多次的异步操作,我们常常会经历回嵌套的情况,对于开发者而言,无疑苦不堪言。 当 Kotlin 出现之后,上述问题可以说真正意义上得到了好的解法。...写在开始 大概在三年前,那时的我实习期间刚学会 Kotlin ,意气风发,Api 调用的也是炉火纯青,对外自称api调用渣渣工程师。 那时候的客户端还没这么饱和,也不像现在这样稳定。...上述特点来自Android官网-Android上的Kotlin进展 注:非特别标注,本文接下来的皆指Kotlin。...比如,通过 CPS 转换来实现异步编程。具体来说,在被挂起时,会将当前的执行状态保存到一个回函数(即挂起函数的 Continuation),然后将控制权交回给调用方。...在JVM平台,Kotlin就是一个异步编程框架,它可以帮助我们简化异步代码,提升可读性,从而极大减少异步回所带来的复杂逻辑。

1.4K40

在 Android 开发中使用 | 上手指南

为了能够避免泄漏,Kotlin 引入了结构化并发 (structured concurrency) 机制,它是一系列编程语言特性和实践指南的结合,遵循它能帮助您追踪到所有运行于的任务。...借助 scope 来取消任务 在 Kotlin ,定义必须指定其 CoroutineScope 。CoroutineScope 可以对进行追踪,即使被挂起也是如此。...注意: 被挂起时,系统会以抛出 CancellationException 的方式协作取消协。捕获顶级异常 (Throwable) 的异常处理程序将捕获此异常。...下一步 本篇文章,我们探讨了如何在 Android 的 ViewModel 启动,以及如何在代码运用结构化并发,来让我们的代码更易于维护和理解。...在下一篇文章,我们将探讨如何在实际编码过程中使用,感兴趣的读者请继续关注我们的更新。

1.4K20

理解、LiveData 和 Flow

也就是 Kotlin (Coroutine)。 的优势 的优点主要来自三个方面: 很容易离开主线程。...但可以让开发者只需要一行代码就完成这个工作,而且没有累人的回调处理。 样板代码最少。完全活用了 Kotlin 语言的能力,包括 suspend 方法。...绝大部分情况下,的取消操作是自动的,毕竟我们在对应的作用域里启动一个时,也同时明确了它会在何时被取消。但我们有必要讲一讲如何在内部来手动取消协。...如果您的数据源尚未支持,比如是一个 Java 代码库,而且使用的是回机制。...相信看到这里,您对如何在实际应用中使用、LiveData 和 Flow 已经有了比较系统的认识。

2.2K20

Android的Coroutine原理详解

可谓是众说纷纭,什么内核态用户态巴拉巴拉,很容易给我们带偏 2.kotlin的各种语法糖对我们造成的干扰。: 高阶函数 源码实现类找不到 所以扎实的kotlin语法基本功是学习的前提。...是什么?有什么用? ----------- kotlin干的事就是把异步回代码拍扁了,捋直了,让异步回代码同步化。除此之外,没有任何特别之处。...本文将会围绕挂起与恢复彻底剖析的实现原理 Kotlin函数基础知识复习 再Kotlin函数是一等公民,有自己的类型 函数类型 fun foo(){} //类型为 () -> Unit fun foo...挂起函数调用任何函数。 非挂起函数只能调用非挂起函数。 换句话说,suspend函数只能在suspend函数调用。...调用resume意义在于重新回BaseContinuationImpl的resumeWith,进而唤醒状态机,继续执行体的代码。

93620

Android Jetpack系列 之分页库Paging3(一)

语言并且使用了和Flow,所以也需要添加的库如下: implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.7-...mpp-dev-11' 如果你还不了解和Flow可以先移步至前两篇文章 Kotlin 看这一篇就够了 Kotlin Flow 看这一篇 带你入门~ 项目示例 在官方文档也给出了我们Paging....build() return retrofit.create(mClass) as T } } 和 DataApi接口,这里我们将方法声明为挂起函数,便于在调用...这里需要提醒的是如果你使用的不是Kotlin 而是Java,则需要继承对应的PagingSourceRxPagingSource或ListenableFuturePagingSource。...mainActivityViewModel.getData().collectLatest { dataRecycleViewAdapter.submitData(it) } } } 我们在调用

4K30
领券