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

知识点 | ViewModel 四种集成方式

Activity 和 Fragment 通常会在下面三种情况下销毁: 从当前界面永久离开: 用户导航至其他界面或直接关闭 Activity (通过点击返回按钮或执行的操作调用了 finish() 方法...() } 复制代码 这段示例代码只启动了一个,但我们在真实的使用环境下很容易创建出许多,这就难免会导致有些的状态无法跟踪。...如果这些中刚好有您想要停止的任务时,就会导致任务泄漏 (work leak)。 为了防止任务泄漏,您需要将加入到一个 CoroutineScope 中。...CoroutineScope 可以持续跟踪的执行,它可以取消。当 CoroutineScope 取消时,它所跟踪的所有都会被取消。...时,使用 viewModelScope 来让在 ViewModel 销毁时自动取消。

2.5K20

知识点 | ViewModel 四种集成方式

Activity 和 Fragment 通常会在下面三种情况下销毁: 从当前界面永久离开: 用户导航至其他界面或直接关闭 Activity (通过点击返回按钮或执行的操作调用了 finish() 方法...() } 这段示例代码只启动了一个,但我们在真实的使用环境下很容易创建出许多,这就难免会导致有些的状态无法跟踪。...如果这些中刚好有您想要停止的任务时,就会导致任务泄漏 (work leak)。 为了防止任务泄漏,您需要将加入到一个 CoroutineScope 中。...CoroutineScope 可以持续跟踪的执行,它可以取消。当 CoroutineScope 取消时,它所跟踪的所有都会被取消。...时,使用 viewModelScope 来让在 ViewModel 销毁时自动取消。

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

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

借助 scope 来取消任务 在 Kotlin 中,定义必须指定其 CoroutineScope 。CoroutineScope 可以对进行追踪,即使挂起也是如此。...这在 Android 开发中非常有用,比如它能够在用户离开界面时停止执行。 CoroutineScope 会跟踪所有,并且可以取消由它所启动的所有。...由于 launch 和 async 仅能够在 CouroutineScope 中使用,所以任何您所创建的都会被该 scope 追踪。Kotlin 禁止您创建不能够追踪的,从而避免泄漏。...当用户通过导航离开某界面时,与该界面相关的 CoroutineScope 可以取消掉所有不需要的任务。 结构化并发能够保证当某个作用域取消后,它内部所创建的所有也都被取消。...如果调用方是 viewModelScope,这一千个用户离开界面后都会自动取消掉,非常整洁高效。

1.4K20

使用kotlin提高app性能(译)

本主题描述了如何使用Kotlin解决这些问题,使您能够编写更清晰,更简洁的应用程序代码。 管理长时间运行的任务 在Android上,每个应用程序都有一个主线程来处理用户界面并管理用户交互。...即使代码看起来像普通的顺序阻塞请求,也可以确保网络请求避免阻塞主线程。 Use coroutines for main-safety Kotlin使用调度程序来确定哪些线程用于执行。...要在主线程之外运行代码,您可以告诉Kotlin在Default或IO调度程序上执行工作。在Kotlin中,所有协同程序必须在调度程序中运行,即使它们在主线程上运行。...CoroutineScope的一个重要功能是当用户离开应用程序中的内容区域时停止执行。 使用CoroutineScope,您可以确保正确停止任何正在运行的操作。...如果因为用户离开了屏幕而导致ViewModel销毁,则必须停止它正在执行的所有异步工作。否则,您将浪费资源并可能泄漏内存。

2.3K10

精通的必会十一个高级技巧

在本文中,我们将探讨的高级技巧,帮助您更好地处理复杂的并发需求,提高性能和可维护性。 介绍 Kotlin的一项强大特性,它使并发编程更加直观、简单。...的并发限制 原理 在某些情况下,限制同时运行的数量是必要的,以控制并发操作。这有助于避免系统资源过度消耗,防止过多的任务同时执行。...Semaphore 维护一个内部计数器,每次进入临界区时,计数器减少,每次离开时,计数器增加。如果计数器为零,后续尝试进入临界区的将被阻塞,直到有其他离开。...这有助于确保即使中发生异常,应用程序也能够以合适的方式处理它们。 的超时和取消策略 原理 在中,可以设置超时操作,以确保某些操作不会无限期地执行。...通过掌握的高级技巧,您可以更好地处理复杂的并发需求,提高性能和可维护性。希望本文中的示例和技巧能帮助您优化Android应用的异步操作,提供更好的用户体验。

27840

Kotlin 学习笔记(四)—— 的基础知识,面试官的最爱了~

这次咱来看看 Kotlin 的基础知识。 1. 是什么 是一种编程思想。它并不局限于任何语言,不仅 Kotlin 中有对的实现,Python、Go 等语言也有。...这里挂起的对象是这个方法所在的。那么,挂起的真正意思是什么? 挂起的意思是,这个正在线程上运行的体代码,将要从当前线程脱离开来,即剩下的代码不往下执行了。...脱离开后,和线程会怎么样呢?...线程这边比较好理解,如果有其他的任务需要处理,操作系统肯定会安排线程去执行其他的任务;如果暂时没有什么任务需要处理,可能就会被回收掉,或者放入线程池中;这一边,则将会在指定的线程中,继续执行之前中断的代码...;还可以指定在哪个线程中执行,比如 IO 线程、UI Main 线程等;还可以指定当前中断后在哪个线程中去恢复它。

1.4K30

如何正确的在 Android 上使用

虽然在 Kotlin 发布之初就有了,但是直到 2018 年的 KotlinConf 大会上,JetBrain 发布了 Kotlin1.3RC,这才带来了稳定版的。...即使稳定版的已经发布了一年之余,但是好像并没有足够多的用户,至少在我看来是这样。在我学习的各个阶段中,遇到问题都鲜有地方可以求助,抛到技术群基本就石沉大海了。...在 Android 上的使用 GlobalScope 在一般的应用场景下,我们都希望可以异步进行耗时任务,比如网络请求,数据处理等等。当我们离开当前页面的时候,也希望可以取消正在进行的异步任务。...大致意思是,Global scope 通常用于启动顶级,这些在整个应用程序生命周期内运行,不会被过早地取消。程序代码通常应该使用自定义的作用域。...当 ViewModel.onCleared() 调用的时候,viewModelScope 会自动取消作用域内的所有

2.7K30

破解 Kotlin (5) - 取消篇

关键词:Kotlin 取消 任务停止 的任务的取消需要靠内部调用的协作支持,这就类似于我们线程中断以及对中断状态的响应一样。 1. 线程的中断 我们先从大家熟悉的话题讲起。...,那么意味着 getUserCoroutine 调用所在的取消了,这时候我们也要相应的做出取消的响应,也就是把 OkHttp 发出去的请求给取消掉。...,OkHttp 在收到我们的取消指令之后,也确实停止了网络请求,并且回调给我们一个 IO 异常,这时候我们的已经取消,在处于取消状态的上调用 Continuation.resume 、 Continuation.resumeWithException...再谈 Retrofit 的扩展 4.1 Jake Wharton 的 Adapter 存在的问题 我在破解 Kotlin - 入门篇(https://www.bennyhuo.com/2019...小结 这篇文章我们从线程中断的概念切入,类比学习的取消,实际上大家就会发现这二者从逻辑上和场景上有多么的相似。

1.7K50

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

阅读字数:3232 | 9分钟阅读 摘要 相对多线程有着更易于控制的优势,很多语言都提供了的能力,kotlin也不例外。...通过Kotlin在JVM平台使用 示例:第三方登录 第三登录在应用开发中可以算是一个很常见的场景,具体的逻辑是这样的,首先向第三方平台请求用户token,然后将token和自身平台上的用户账号关联起来...setText方法的launch中有一个UI参数,这是Kotlin提供的对象,表示在UI线程中启动,同时中断以后的恢复也是在UI线程中。...因此Kotlin库提供了一个关键字suspend,表示挂起指出该方法是一个方法不是直接运行在UI线程中。...方法内部的this指向doResume传入的参数,第一个启动的时候this.label默认为0,requestToken方法调用同时label值改为1,requestToken执行完之后会通过传入的

2.3K51

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

在过去几年间,这个概念发展势头迅猛,现已经诸多主流编程语言采用,比如 Javascript、C#、Python、Ruby 以及 Go 等。Kotlin是基于来自其他语言的既定概念。...当主线程下所有的都被暂停,主线程处理别的事件时就会毫无压力。 即使代码可能看起来像普通的顺序阻塞请求,也能确保网络请求避免阻塞主线程。...这些会导致执行时间长从而让用户感觉很 “卡” 的操作都不应该放在主线程上执行。 使用 suspend 并不意味着告诉 Kotlin 要在后台线程上执行一个函数,这里要强调的是,会在主线程上运行。...在 Kotlin 中,所有都必须在调度器中运行,即使它们是在主线程上运行也是如此。可以自行暂停,而调度器负责将其恢复。...同时,在这个原则下也可以主线程自由调用,网络请求或数据库操作代码也变得非常简洁,还能确保用户在使用应用的过程中不会觉得 “卡”。

1.5K30

破解 Kotlin 番外篇(1) - 为什么被称为『轻量级线程』?

关键词:Kotlin stackful stackless 接触新概念,最好的办法就是先整体看个大概,再回过头来细细品味。...其实不是的,的概念最核心的点其实就是函数或者一段程序能够挂起(说暂停其实也没啥问题),待会儿再恢复,挂起和恢复是开发者的程序逻辑自己控制的,是通过主动挂起出让运行权来实现协作的,就没了,一句话就能说明白的事儿是不是特简单...我们来想象一下,程序挂起,或者说中断,最关键的是什么?是保存挂起点,或者中断点,对于线程操作系统中断中断点就是保存在调用栈当中的,而我们的无栈要保存到哪儿呢?...说到这里,我们已经接近 Kotlin 的本质了,它是一种无栈实现,它的本质就是一段代码 + Continuation 实例。 ? 4. Kotlin 真的只是一个线程框架吗?...线程除了包含内核线程本身执行代码能力的含义以外,通常也赋予了逻辑任务的概念,所以是一种轻量级的『线程』的说法,更多描述的是它的使用场景,这句话也许这样说更贴切一些: 更像一种轻量级的『线程』。

1.9K20

《Kotin 极简教程》第9章 轻量级线程:(1)

) 当控制流程离开时,的执行挂起,此后控制流程再次进入这个协时,这个协只应从上次离开挂起的地方继续 (The execution of a coroutine is suspended as...可以用来解决很多问题,比如nodejs的嵌套回调,Erlang以及Golang的并发模型实现等。 实质上,(coroutine)是一种用户态的轻量级线程。...如果这个阻塞的线程中断,runBlocking抛出InterruptedException异常。...9.5 vs 守护线程 在Java中有两类线程:用户线程 (User Thread)、守护线程 (Daemon Thread)。...我们可以看出,即使我们调用了cancel函数,当前的job状态isAlive是false了,但是的代码依然一直在运行,并没有停止。

1.1K10

Kotlin 负责人:我们是如何一步步设计 Kotlin 的?

事实上,即使是在今天,Java 互操作性仍然也消耗了 Kotlin 语言设计所花费时间中相当大的一部分。 2演进和协 在语言的初始设计中,最重要的考量是要删除哪些特性,而不是要包括哪些特性。...挑战在于维护语言的概念完整性,确保新特性不仅可以实现,而且还能很容易地现有语言的用户所理解和采用,并融入其生态系统。...Kotlin 深受 C# async/await 的启发,但最终的 Kotlin 设计却与 Onward 2021《Kotlin :设计和实现》中所解释的有很大差异。...Kotlin 语言已经有了自己的传统和大量的代码,因此支持的新特性必须要适应现有的代码库,并且必须要能帮助现有的用户。...自 2016 年以来,他一直在 JetBrains 从事 Kotlin 相关的工作,并对 Kotlin 的设计和 Kotlin 库的开发做出了贡献。

1.2K20

写给Android工程师的指南

在维基百科中,是这样解释的: 是计算机程序的一类组件,推广了协作式多任务的子例程,允许执行挂起与恢复。相对子例程而言,更为一般和灵活,但在实践中使用没有子例程那样广泛。...如果将上述概念带入到与线程中,当一个线程执行时,它会一直运行,直到操作系统强制中断或者自己放弃CPU;而的协作式则需要程之间互相配合协作,以便让其他也可以获得执行机会,通常情况下,这种协作关系是由应用层...用户空间下的轻量级线程,也称为“微线程”。它不依赖操作系统的调度,而是由用户自己控制的执行。程之间的切换只需要保存和恢复少量的状态,开销较小。...简单来说,是一种更加高效、灵活的并发处理方式,但需要用户 自己控制执行流程和协间的通信 ,而线程则由操作系统负责调度,具有更高的并发度和更强的隔离性,但开销较大。...那Kotlin呢? 在上面,我们说了 线程 与 ,但这个协指的是 广义 这个概念,而不是 Kotlin ,那如果回到 Kotlin 呢?

1.3K40

从 LiveData 迁移到 Kotlin 数据流

这种情况非常常见——比如当用户旋转设备时,原来的视图会先销毁,然后数秒钟内重建。...liveData 构建器所使用的方法是 添加一个 5 秒钟的延迟,即如果等待 5 秒后仍然没有订阅者存在就终止。...数据重现的过期时间 如果用户离开应用太久,此时您不想让用户看到陈旧的数据,并且希望显示数据正在加载中,那么就应该在 WhileSubscribed 策略中使用 replayExpirationMillis...Activity 和 Fragment 提供了若干构建器: Activity.lifecycleScope.launch : 立即启动,并且在本 Activity 销毁时结束。...它会在 lifecycleOwner 进入 X 状态之前一直等待,又在离开 X 状态时挂起。对此,需要注意对应的只有在它们的生命周期所有者销毁时才会被取消。

1.4K20

kotlin--入门

更像是一个管理者的秘书,它让我们从复杂的逻辑中得到解放,只需要告诉秘书执行流程,其他的都交由秘书安排 以上就是我对的理解,接下来来学习如何使用kotlin 一、实现异步任务相同功能 如果说我们有一个耗时操作...,的代码很容易理解,就是等待耗时任务返回结果,然后将结果设置到TextView上 的核心就是函数或一段程序能够挂起,稍后再在挂起的位置恢复。...玩过单片机的同学,肯定会觉得这个和“中断”很像,理解起来是差不多的,当然这两个是完全不同的层级了 二、的挂起与恢复 常规函数基础操作除了的invoke(或call)和return,新增了suspend...,也就是我们之前代码指定的Dispatchers,即使在主线程也是如此 官方提供的调度器为以下三种: 调度器 四、的两部分 kotlin实现分为两个层次,我们之前使用的都是业务框架层 1...CoroutineScope,它会跟踪所有,同样它还可以取消由它所启动的所有 常用的相关API有: 1.GlobalScope:生命周期是process级别,即使Activity或Fragment

57210

Kotlin 实现原理解析

Kotlin 是一种在 Kotlin 语言中实现并发编程的强大工具。它提供了一种轻量级的线程管理方式,使得开发者能够以接近同步代码的方式编写异步代码。...本文将深入探讨 Kotlin 的实现原理,并分析其关键源码。基础在深入源码之前,我们需要理解的基本概念。...构建器Kotlin 通过构建器(如 launch 和 async)来启动。这些构建器是顶层函数,它们接受一个上下文(CoroutineContext)和一个体(lambda 表达式)。...挂起函数的执行可以调度器中断和恢复,其调用会被编译器转换为接受一个额外参数的函数调用,这个参数是 Continuation 类型的对象。...当创建时,它处于创建状态;当调度器开始执行时,它进入运行状态;当遇到挂起点时,进入挂起状态;当执行完毕时,它进入完成状态。

38510

JetBrains首席语言设计师:我们将如何让Kotlin再活几十年

事实上,即使是在今天,Java 互操作性也仍然消耗了 Kotlin 语言设计所花费时间中相当大的一部分。 演进和协 在语言的初始设计中,最重要的考量是要删除哪些特性,而不是要包括哪些特性。...挑战在于维护语言的概念完整性,确保新特性不仅可以实现,而且还能很容易地现有语言的用户所理解和采用,并融入其生态系统。...Kotlin 深受 C#  async/await 的启发,但最终的 Kotlin 设计却与 Onward 2021《Kotlin :设计和实现》中所解释的有很大差异。...Kotlin 语言已经有了自己的传统和大量的代码,因此支持的新特性必须要适应现有的代码库,并且必须要能帮助现有的用户。...自 2016 年以来,他一直在 JetBrains 从事 Kotlin 相关的工作,并对 Kotlin 的设计和 Kotlin 库的开发做出了贡献。

1.5K10

深入分析 Java、Kotlin、Go 的线程和协

的目的 的特点 的原理 Java、Kotlin、Go 的线程与 Kotlin 使用「线程」的代码 使用「」的代码 Go 的 Java 的 Kilim 框架 Java...当在网上搜索时,我们会看到: Kotlin 官方文档说「本质上,是轻量级的线程」。 很多博客提到「不需要从用户态切换到内核态」、「是协作式的」等等。...633265-20201211165837001-1582226810.jpg 当A调用暂停方法或阻塞时,A会进入到挂起队列,调度器会调用等待队列中的其它抢占线程A执行。...当A唤醒时,它需要重新进入到就绪队列中,通过调度器抢占线程,如果抢占成功,就继续执行A,失败则继续等待抢占线程。...可以先看下 Kotlin 和 Go 的Kotlin Kotlin 在诞生之初,目标就是完全兼容 Java,却是一门非常务实的语言,其中一个特性,就是支持

76230
领券