LiveData作为jettpack的一环,常搭配ViewModel一起使用;相比于RxJava,用LiveData封装的LiveDataBus更加简洁方便,并且LiveData会感知页面的信息变化,当页面是不可见的时候,及时Data有数据更新,页面也不会接收到,然后在页面重新可见再去把数据通知给页面,而且在页面销毁时也会及时销毁数据,大大降低了内存泄露的发生;这篇主要简单分析一下LiveData
Kotlin的官方文档提出把协程换成线程试试,这里这么多的线程明显会 OutOfMemoryError。前面我们也提到 Coroutine 的对比对象应该是 Runnable,并且我们有了线程池,还对比啥的线程呢,我们直接看看对比线程池,协程的效率如何:// ThreadPool4.kt
const val times = 100_000
const val delayTime = 5000L
Kotlin协程的使用协程是什么?首先kotlin协程是kotlin的扩展库(kotlinx.coroutines)。线程在Android开发中一般用来做一些复杂耗时的操作,避免耗时操作阻塞主线程而出现ANR的情况,例如IO操作就需要在新的线程中去完成。但是呢,如果一个页面中使用的线程太多,线程间的切换是很消耗内存资源的,我们都知道线程是由系统去控制调度的,所以线程使用起来比较难于控制。这个时候k
转载
2023-12-15 10:55:41
74阅读
文章目录前言一. gradle配置二. 创建协程的三种方式2.1 runBlocking2.2 GlobalScope2.3 CoroutineScope三. 总结 前言协程:英文coroutine,协程可以认为是轻量级的线程,是一套基于Java线程池的封装。相对于线程要处理各种同步问题,协程则可以将其简化,以同步的方式写异步代码。一. gradle配置对于Android项目,最新版本的kotl
转载
2023-12-01 16:12:20
248阅读
按调用栈分类
由于协程需要支持挂起、恢复,因此对于挂起点的状态保存就显得极其关键。类似地,线程会因为 CPU 调度权的切换而被中断,它的中断状态会保存在调用栈当中,因而协程的实现也按照是否开辟相应的调用栈存在以下两种类型:
有栈协程 Stackful Coroutine:每一个协程都会有自己的调用栈,有点儿类似于线程的调用栈,这种情况下的协程实现其
参考链接示例来自bilibili Kotlin语言深入解析 张龙老师的视频本节先介绍协程的相关概念 概念可能枯燥,我们先要了解协程中的相关概念 然后结合代码理解这些概念 加深印象协程的定义协程通过将复杂性放入库中来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库为我们解决异步性协程库可以将用户代码地相关部分包装为回调、订阅相关事件(listener)、在不同地线程(甚至不同的机器)上调度,
转载
2024-04-08 22:54:29
73阅读
1、请你说说线程和协程的区别1. 进程有独立的地址空间,线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间; 2. 进程和线程切换时,需要切换进程和线程的上下文,进程的上下文切换时间开销远远大于线程上下文切换时间,耗费资源较大,效率要差一些; 3. 进程的并发性较低,线程的并发性较高; 4. 每个独立的进程有一个程序运行的入口、顺序执行序列和程序的出口,但
转载
2024-06-26 20:12:02
68阅读
什么是协程?协程是指函数或方法和其他函数或方法并发执行。协程可以看做是一种轻量级线程。创建协程的成本比线程要低很多。因此Go应用中可以经常见到成千上万的协程并发运行。Go 协程相比于线程的优势相比线程而言,Go 协程的成本极低。堆栈大小只有若干 kb,并且可以根据应用的需求进行增减。而线程必须指定堆栈的大小,其堆栈是固定不变的。Go 协程会复用数量更少的 OS 线程。即使程序有数以千计的 Go 协
转载
2024-02-27 08:24:27
71阅读
文章目录Kotlin协程原理特点调度程序线程 Kotlin协程原理协程是一种并发设计模式,您可以在 Android 平台上使用它来简化异步执行的代码。Kotlin 使用堆栈帧管理要运行哪个函数以及所有局部变量。挂起协程时,系统会复制并保存当前的堆栈帧以供稍后使用。恢复时,会将堆栈帧从其保存位置复制回来,然后函数再次开始运行。即使代码可能看起来像普通的顺序阻塞请求,协程也能确保网络请求避免阻塞主线
转载
2024-02-28 11:31:28
29阅读
文章目录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阅读
首先祝大家端午节快乐,吃粽子了没?哈哈。我今天一直在思考一个问题:端午节是为了纪念屈原老先生投江而在民间流传下来的节日。这本是何等悲壮的一件事,为何时至今日,变成了一个好像很喜庆的日子。屈原老先生估计心想:老子TM只是感动了自己吗?言归正传,虽然是端午佳节,但是我等屌丝,药不能停。世界一直在变化,要学会拥抱变化。今天想和大家分享的是协程,鄙人才识浅薄,还望诸公海涵。首先想说的是为什么会有协程的出现
协程的作用协程通过替代回调(callback)来简化异步代码听起来蛮抽象的,来看代码fun fetchDocs() {
val result = get("developer.android.com")
show(result)
}
复制代码Android系统为了保证界面的流畅和及时响应用户的输入事件,主线程需要保持每16ms一次的刷新(调用 onDraw()函数),所以不能
转载
2024-08-08 15:03:51
84阅读
题图
本文基于 Go 1.13创建系统线程以及在系统线程间切换,会对程序的内存和性能造成较大的开销。Go的目标是尽量利用CPU多核资源。设计之初就考虑了高并发性。M,P,G 模型为了达到这个目标,Go拥有一个将协程调度到系统线程执行的调度器。这个调度器定义了三个核心概念,在Go源码中是这样解释的:G - goroutinue. 协程M - worker thread, or ma
协程的作用协程并不是一个新鲜概念,相信大家都有所了解,它的好处是可以极大程度的复用线程,通过让线程满载运行,达到最大程度的利用CPU,进而提升应用性能。它和反应式编程一样都可以有效的提高资源的利用率,并且让我们脱离callback hell。目前JAVA里还没有原生的协程库(AJDK里对协程提供了支持)。Kotlin从1.1开始支持协程,不过目前还处于试验阶段,感兴趣的同学可以查看这篇文档。如何在
转载
2023-07-02 11:46:50
234阅读
简介介绍协程是一种并发设计模式,您可以在 Android 平台上使用它来简化异步执行的代码。
简单来说就是执行异步任务。参考文档谷歌开发者Kotlin文档文章目录Kotlin之协程(一)初识Kotlin之协程(二)取消优点轻量:您可以在单个线程上运行多个协程,因为协程支持挂起,不会使正在运行协程的线程阻塞。挂起比阻塞节省内存,且支持多个并行操作。内存泄漏更少:使用结构化并发机制在一个作用域内执行多
转载
2023-11-19 10:14:24
98阅读
什么是协程协程(Coroutines)是一种比线程更加轻量级的存在,正如一个进程可以拥有多个线程一样,一个线程可以拥有多个协程有一点必须明确的是,一个线程的多个协程的运行是串行的,如果是多核CPU,多个进程或一个进程内的多个线程是可以并行运行的,但是一个线程内协程却绝对是串行的,无论CPU有多少个核。毕竟协程虽然是一个特殊的函数,但仍然是一个函数。一个线程内可以运行多个函数,但这些函数都是串行运行
文章目录概念协程优点yield的简单实现greenlet模块gevent模块 概念协程:协助程序,线程和进程都是抢占式特点,线程和进程的切换我们是不能参与的。 而协程是非抢占式特点,协程也存在着切换,这种切换是由我们用户来控制的。 协程主解决的是IO的操作。协程,又称微线程,纤程。英文名Coroutine。协程优点优点1: 协程极高的执行效率。因为子程序切换不是线程切换,而是由程序自身控制,因
转载
2024-02-03 11:13:38
55阅读
简介Rxjava 是由微软架构师 Erik Meijer 领导的团队研发出来的开源库,目的是为了提供一个一致的编程接口,以便开发者对异步操作能够进行方便的处理。Rxjava 的设计是的开发者能通过 LINQ 的风格进行异步处理,所以它能将各种判断、循环、过滤、转换等的嵌套层级拉平,以流式的方式来编程,极大地简化了代码,增强了代码的阅读性。如何使用 Rxjava下面先举几个例子来说明一下 Rxjav
转载
2023-08-15 22:09:03
117阅读
4.1 Java语言和Kotlin语言对比(1)void类型的映射Java中返回void类型,对应的Kotlin返回Unit。Java中特殊标识的转义有些Kotlin定义的关键字,是Java中的合法标识名,例如in, object, is etc。如果Java库使用一个Kotlin的关键字作为函数名,可以转义之后再调用改函数,转义时添加 bracktick(`)字符foo.`is`(bar)空指针
转载
2023-08-12 18:21:35
141阅读