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

Kotlin解析系列():调度与挂起

Kotlin实现层次: 基础设施层:标准库API,主要对提供了概念和语义最基本支持; 业务框架层:上层框架支持,基于标准库实现封装,也是我们日常开发使用扩展库。...图片 二、启动 具体使用程前,首先要配置对Kotlin依赖。...确保所有的都会被追踪,Kotlin 不允许没有使用CoroutineScope情况下启动。...对于 ATOMIC 模式,它一定会被启动,实际遇到第一个挂起点之前,它执行是不会停止,而 delay 是一个 suspend 函数,这时我们迎来了自己第一个挂起点,恰好 delay 是支持...5.2 suspend本质 Kotlin 使用堆栈帧来管理要运行哪个函数以及所有局部变量。 常规函数基础添加了suspend和resume两项操作用于处理长时间运行任务。

1.7K40

破解 Kotlin (5) - 取消篇

关键词:Kotlin 取消 任务停止 任务取消需要靠内部调用协作支持,这就类似于我们线程中断以及对中断状态响应一样。 1. 线程中断 我们先从大家熟悉的话题讲起。...,我们没有用 suspend main,而是直接用 runBlocking 启动,这个方法 Native 也存在,都是基于当前线程启动一个类似于 Android Looper 死循环,或者叫消息队列...之后再来执行后面的这段代码(也就是 log(2));而在这期间,我们 ③ 处对刚才启动触发了取消,因此 ② 处 delay还没有回调时候就被取消了,因为 delay 可以响应取消,因此...,它构造可接受一个 Job 实例作为它,那么问题来了,这里并没有告诉它父究竟是谁,因此也就谈不作用域事儿了,这好像我们用 GlobalScope.launch 启动了一个一样。...Continuation 实例,这实际就相当于要继承当前上下文,因此我们只需要在真正需要切换时候再去做这个转换即可: public suspend fun Call<

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

从 LiveData 迁移到 Kotlin 数据流

#2: 把一次性操作结果暴露出来 这个例子与上面代码片段效果一致,只是这里暴露调用结果而无需使用可变属性。...Activity 和 Fragment 提供了若干构建器: Activity.lifecycleScope.launch : 立即启动,并且本 Activity 销毁时结束。...Fragment.lifecycleScope.launch : 立即启动,并且本 Fragment 销毁时结束。...Fragment.viewLifecycleOwner.lifecycleScope.launch : 立即启动,并且本 Fragment 中视图生命周期结束时取消协。...lifecycle.repeatOnLifecycle 前来救场 这个新构建器 (自 lifecycle-runtime-ktx 2.4.0-alpha01 后可用) 恰好能满足我们需要: 某个特定状态满足时启动

1.4K20

使用kotlin提高app性能(译)

是一种并发设计模式,您可以Android使用它来简化异步执行代码。Kotlin1.3版本添加了 Coroutines,并基于其他语言既定概念。...本主题描述了如何使用Kotlin解决这些问题,使您能够编写更清晰,更简洁应用程序代码。 管理长时间运行任务 Android每个应用程序都有一个主线程来处理用户界面并管理用户交互。...要在主线程之外运行代码,您可以告诉KotlinDefault或IO调度程序执行工作。Kotlin中,所有协同程序必须在调度程序中运行,即使它们主线程运行。...要指定应该运行位置,Kotlin提供了三个可以使用调度程序: Dispatchers.Main – 使用此调度程序主Android线程运行协同程序。...通过Kotlin结构并发,您可以定义一个启动一个或多个协同程序coroutineScope。

2.3K10

Android入门教程 | Fragment 基础概念

可以将片段视为 Activity 模块组成部分,它具有自己生命周期,能接收自己输入事件,并且可以 Activity 运行时添加或移除片段(这有点像可以不同 Activity 中重复使用“子...savedInstanceState 参数是恢复片段时,提供片段实例相关数据 Bundle(处理片段生命周期部分对恢复状态做了详细阐述)。...android:name 属性指定要在布局中进行实例 Fragment 类。...创建此 Activity 布局时,系统会将布局中指定每个片段实例,并为每个片段调用 onCreateView() 方法,以检索每个片段布局。...这样就能做到多个 Fragment 切换不重新实例: 2. Fragment 优点 Fragment 可以使你能够将 activity 分离成多个可重用组件,每个都有它自己生命周期和UI。

3.5K40

关于 Kotlin Coroutines, 你可能会犯 7 个错误

但是,我发现了许多开发者使用时会犯一些通用性错误。 1. 使用实例一个新 Job 实例 有时候你会需要一个 job 来对进行一些操作,例如,稍后取消。...通过向构建器 launch() 传递我们自己 job 实例,实际并没有把新 job 实例和协本身进行绑定,取而代之是,它成为了新父 job。...我们打破了结构并发,因此当我们取消协作用域时,将不再被取消。 解决方式是直接使用 launch() 返回 job。...错误使用 SupervisorJob 有时候你会使用 SupervisorJob 来达到下面的效果: job 继承体系中停止异常向上传播 当一个失败时不影响其他同级 由于构建器 launch...使用 CoroutineExceptionHandler 再来一条简明扼要构建器中使用 CoroutineExceptionHandler 不会有任何效果。

90620

揭秘kotlinCoroutineContext

前言 -- 从kotlin1.1开始,就被添加到kotlin中作为实验性功能,直到kotlin1.3,kotlinapi已经基本稳定下来了,现在kotlin已经发布到了1.4,为添加了更多功能并进一步完善了它...,所以我们现在在kotlin代码中可以放心引入kotlin使用它,其实并不是kotlin独有的功能,它是一个广泛概念,协作式多任务实现,除了kotlin外,很多语言如Go、Python等都通过自己方式实现了...,这些可以同一线程不同时刻被执行,也可以不同线程不同时刻被执行。...,例如启动一个1,中继续启动2、3,那么1就是2、32、3就是1每个都会有一个对应Job,程之间父子关系是通过Job对象维持,像一颗树一样...kotlin每个都有一个Continuation实例与之对应,当恢复时会调用ContinuationresumeWith方法,它实现在DispatchedContinuation中,如下

1.8K30

再谈程之CoroutineContext我能玩一年

(Dispatchers.Main, “name”) + (Dispatchers.IO) = (Dispatchers.IO, “name”) ❝要注意是,一个新上下文,除了继承父上下文之外...作用域上下文中定义元素,是使用上下文地方,覆盖库默认值一种方式。该作用域还提供了一个job,因此从该作用域启动所有coroutine都有同一个父级。...然而,由于结构并发,如果不能被取消,deferred可能会导致内存泄露。所以,确保CompletableDeferred被正确取消最简单方法是将它与它parent job绑定。...如果我们愿意,我们实际可以从单个元素重建一个与当前上下文相同上下文。...通过使用简单 + 运算符组合上下文,语言设计者可以启动时轻松定义属性,并从执行上下文继承这些属性。这使开发人员可以完全控制他们,同时保持语法流畅。

61010

Kotlin实现原理:CoroutineScope&Job

今天我们来聊聊KotlinCoroutine。 如果你还没有接触过,推荐你先阅读这篇入门级文章What? 你还不知道Kotlin Coroutine?...例如,Android中使用来请求数据,当接口还没有请求完成时Activity就已经退出了,这时如果不停止正在运行将会造成不可预期后果。...所以Activity中我们都推荐使用lifecycleScope来启动,lifecycleScope可以让具有与Activity一样生命周期意识。...Job 基本启动一个就会产生对应Job,例如 lifecycleScope.launch { } launch返回就是一个Job,它可以用来管理,一个Job中可以关联多个子Job,同时它也提供了通过外部传入...项目 android_startup: https://github.com/idisfkj/android-startup 提供一种应用启动时能够更加简单、高效方式来初始组件,优化启动速度。

1.6K40

Kotlin 新版来了,支持跨平台!

我们来回顾下 1.3 新特性 稳定 Kotlin/Native Beta 多平台项目和工具 用于 Kotlin/Native 和多平台工具 Ktor 1.0 Beta 本次版本带来牛逼特性主要对...不过这样就涉及到了性能问题,因为 UIntArray 被当作 Collection实例使用时会额外 创建 一个对象出来。... IntelliJ IDEA 之外,我们也将发布 Kotlin/Native 插件支持 CLion 2019.1、AppCode 2019.1。...IntelliJ IDEA 支持 调试功能提升 当你调试代码时,你可以看到有一个单独异步堆栈 “Async stack trace” 显示挂起时变量。...你可以浏览 suspend 函数在当前中从上一个挂起点全部堆栈 (第12、4行)并确认变量值: 这会帮助你更方便理解当前运行状态。

1.2K20

破解 Kotlin (2) - 启动

本文将为大家详细介绍几种启动模式之间不同,当然,我不打算现在就开始深入源码剖析原理,大家只需要记住这些规则就能很好使用了。 1....但在开始运行之前无法取消 UNDISPATCHED 立即在当前线程执行体,直到第一个 suspend 调用 LAZY 只有需要情况下运行 2.1 DEFAULT 四个启动模式当中我们最常用其实是...就是需要它运行结果时候, launch 调用后会返回一个 Job 实例,对于这种情况,我们可以: 调用 Job.start,主动触发调度执行 调用 Job.join,隐式触发调度执行...对于 ATOMIC 模式,我们已经讨论过它一定会被启动,实际遇到第一个挂起点之前,它执行是不会停止,而 delay 是一个 suspend 函数,这时我们迎来了自己第一个挂起点,恰好 delay...我们使用线程时候,想要让线程里面的任务停止执行也会面临类似的问题,但遗憾是线程中看上去与 cancel 相近 stop 接口已经被废弃,因为存在一些安全问题。

96230

【翻译】深入 Kotlin

UI 线程启动一个网络请求是不明智做法(安卓这甚至不可能,因为你应用程序会抛出一个丑陋 NetworkOnMainThreadException 异常),由于网络请求经常会花费至少半秒时长...,而这个函数自己则返回一个 Job 实例,它可以在其他使用并被控制执行。... C# 中 async 和 await 都是关键字 C# 中 async 函数只能返回一个 Task 实例或者返回空 如果你仔细观察这个例子,你会看到 Kotlin 中, launch{}...这在命名和返回值类型方面给开发者手头留了一个最灵活工具。 线程 vs 唤醒一个线程需要巨大资源开销。一个现代系统,一个线程非常容易就能吃掉 1M 多内存。...通过使用 CoroutineStart.LAZY 这个值,可以让开发者显式调用返回 Deferred 实例或者 Job 实例 await() 方法或者 join() 方法才开始运行。

1.4K10

破解 Kotlin 番外篇(2) - 几类常见实现

Kotlin 是一种无栈实现,它控制流转依靠对体本身编译生成状态机状态流转来实现,变量保存也是通过闭包语法来实现,不过 Kotlin 可以在任意调用层次挂起,换句话说我们启动一个...coroutine.yield:挂起第一个参数为被挂起实例,后面的参数则作为外部调用 resume 来继续当前返回值,而它返回值则又是外部下一次 resume 调用时传入参数。...coroutine.resume:继续第一个参数为被继续实例,后面的参数则作为内部 yield 时返回值,返回值则为内部下一次 yield 时传出参数;如果是第一次对该实例执行...,它包括: 执行体,主要是指启动时对应函数 控制实例,我们可以通过创建时返回实例控制调用流转 状态,调用流程转移前后,状态会发生相应变化 说明 Lua 标准库属于非对称有栈...相比之下,有朋友抱怨 Kotlin 没有其他语言 async/await 那么容易上手,也没有 go routine 那么容易使用,原因也很简单,Kotlin 用一个最基本 suspend

1.4K31

是时候使用Kotlin编程了

例如: 当然,也可以直接在声明类时候指定构造函数,对象实例可以不写new关键字。...例如: 4, (coroutine),又称微线程,是一种无优先级子程序调度组件,由构建器(launch coroutine builder)启动。...本质是一种用户态轻量级线程,调用方式与子线程调用方式一样,但是使用更加方便灵活,但使用并没有子线程那样广泛。...以下是使用实例: ,关于更多内容可以访问下面的链接: https://www.kotlincn.net/docs/tutorials/coroutines-basic-jvm.html...12.1 简介 12.1.1 与线程 12.1.2 使用好处 12.2 开发环境 12.2.1 Gradle构建方式 12.2.2 Maven构建方式 12.3 基础 12.3.1

3.2K10

你真的懂 (Coroutine) 吗 ? Kotlin Coroutines — Suspending Functions

是什么并不是一个新概念,它并不是 Kotlin 发明。它们已经存在了几十年,并且 Go 等其他一些编程语言中很受欢迎。...本文主要讲 Kotlin 中实现方式。事实 Kotlin 中除了 suspend 关键字,没有任何其他关键字被添加到语言中。...Kotlin 编写异步代码: suspend 函数 Kotlin 编写异步代码方式是使用,这是一种计算可被挂起想法。即一种函数可以某个时刻暂停执行并稍后恢复想法。...编写这段代码代码就好像我们正在编写同步代码,自上而下,不需要任何特殊语法,除了使用一个名为 launch 函数,它实质启动了该(在其他教程中介绍)。 编程模型和 API 保持不变。...编译器负责将其适应每个平台。 Kotlin实现原理 Kotlin 本质是依托线程执行

1.4K30

Android开发3年,九月份面试12家大厂跳槽成功,我有一些面试经验想分享给你们

kotlin ?原理 项目中有直接使用tcp,socket来发送消息吗 如何在网络框架里直接避免内存泄漏,不需要在presenter中释放订阅 生命周期都是通过什么调用?有用过AIDL吗?...kotlin lazy使用,lazy viewmodel 有没有看一下Google官方ViewModel demo ViewModelActivity初始Fragment中初始,有什么区别?...说说App启动过程,ActivityThreadmain方法里面做了什么事,什么时候启动第一个Activity?...动画连续调用原理是什么? 做过一些SDK操作吗? 可以Java项目中使用吗? SharedPreference原理?读取xml是在哪个线程? 了解APK打包过程吗? class文件组成?...介绍一下,讲一个scope与context,+号代表什么 Handler休眠是怎样?epoll原理是什么?如何实现延时消息,如果移除一个延时消息会解除休眠吗?

1.4K10
领券