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

【翻译】忘了RxJava吧——你需要的是拥抱Kotlin协程(Part 12)

【翻译】忘了RxJava吧——你需要的是拥抱Kotlin协程(Part 1/2) 2018-08-31 by Liuqingwen | Tags: Kotlin Android 翻译 |...首先让我们来看下我们是否可以替换 Single 这个对象。在协程的世界里,最合适的对象就是 Deferred 接口了。...替换为协程构建器。...那么关于我们在 RxJava 代码中找到的那些缺点去哪了呢?在协程中都解决了吗? 性能开销问题 协程代码产生的对象数量下降到了 11 (下降了三分之一)。 ?...概要 好吧,在这里我们设法重构一些使用了 Singles 的代码,替换为 Kotlin 协程并从中感受到一些好处。在此系列的下一章节中,我们将考虑使用协程来处理比 RxJava 更高级的一些主题。

1.1K20

RxHttp ,比Retrofit 更优雅的协程体验

,没有关系,那是因为你还没有找到运用场景,而网络请求正是一个很好的切入场景,本文会教你如何优雅,并且安全的开启协程,以及用协程处理多任务,用着用着你就会了。...size 单位:byte } .await() 到这,RxHttp协程的基础Api基本介绍完毕,那么问题了,以上介绍的Api都依赖与协程环境,那我这么开启协程呢?...亦或者说,我对协程不是很懂,你只要保证安全的前提下,告诉怎么用就行了,ok,那下面如何安全的开启一个协程,做到自动异常捕获,且页面销毁时,自动关闭协程及请求 4、协程开启及关闭 ========= 对于协程的开启...AwaitImpl,它内部持有Parser对象,请求返回后,将okhttp3.Response丢给Parser去解析,并返回解析后的对象 Observable:结合RxJava发送请求时,真正执行网络请求的对象...asClass/toClss方法,就是通过它去实现的;第二第三是下载文件时用的的解析器,区别前者是结合RxJava下载的,后者是结合协程下载的;最后一个是解析Bitmap对象用的,asBitmap/toBitmap

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

    即学即用Kotlin - 协程

    前言 上周在内部分享会上大佬同事分享了关于 Kotlin 协程的知识,之前有看过 Kotlin 协程的一些知识,以为自己还挺了解协程的,结果......在这一次分享中,发现 Flow 和 Channel 这一块儿知识是自己不怎么了解的,本文也将着重和大家聊一聊这一块儿的内容,协程部分将分为三篇,本文是第一篇: “《即学即用Kotlin - 协程》 《抽丝剥茧...线程切换 我们学习 RxJava 的时候,大佬们都会说,RxJava 牛逼,牛逼在哪儿呢? 切换线程,同样的,Flow 的协程切换也很牛逼。...Flow 是这么切换协程的: lifecycleScope.launch { // 创建一个协程 Flow createFlow() // 将数据发射的操作放到 IO...Flow 的消费线程在我们启动协程指定调度器的时候就确认好了,对应着启动协程的调度器。

    1.5K20

    破解 Kotlin 协程(4) - 异常处理篇

    如果你一直在用 RxJava 处理这样的逻辑,那么你的请求接口可能是这样的: fun getUserObservable(): Single { return Single.create...也许你已经对 RxJava 很熟悉并且感到很自然,但相比之下,RxJava 的代码比协程的复杂度更高,更让人费解,这一点我们后面的文章中也会持续用例子来说明这一点。 3....,那么就将异常交给当前线程的 UncaughtExceptionHandler 处理;而 async 则在未捕获的异常出现时同样会尝试取消父协程,但不管是否能够取消成功都不会后其他后续的异常处理,直到用户主动调用...await 时将异常抛出。...join 和 await 的不同:join 只关心协程是否执行完,await 则关心运行的结果,因此 join 在协程出现异常时也不会抛出该异常,而 await 则会;考虑到作用域的问题,如果协程抛异常

    1.3K10

    有小伙伴说看不懂 LiveData、Flow、Channel,跟我走

    Kotlin Flow 是基于 Kotlin 协程基础能力搭建的一套数据流框架,从功能复杂性上看是介于 LiveData 和 RxJava 之间的解决方案。...Flow 支持协程: Flow 基于协程基础能力,能够以结构化并发的方式生产和消费数据,能够实现线程切换(依靠协程的 Dispatcher); Flow 支持背压: Flow 的子类 SharedFlow...不过 Flow 是基于协程,在协程会有一些学习成本,但这个应该拆分来看。...flow{} 是 suspend 函数,需要在协程中执行; 发送数据 emit(): emit() 将一个新的值发送到数据流中; 终端操作 collect{}: 触发数据流消费,可以获取数据流中所有的发出值...使用 Flow.shareIn 或 Flow.stateIn 可以把冷流转换为热流,一来可以将数据共享给多个订阅者,二来可以增加缓冲机制。

    2.5K10

    大揭秘,Android Flow面试官最爱问的7个问题

    本文将围绕Android中的Flow相关技巧展开,深入分析高级疑难问题,帮助Android技术人员提升面试水平。 Flow的核心概念 问题: 请解释Flow是什么,与传统的RxJava相比有何优势?...参考简答: Flow是一种基于协程的响应式编程库,用于处理异步数据流。与RxJava相比,Flow的优势在于其与协程的深度集成,提供更加简洁、直观的API。...RxJava的Observable是热流,即不论是否有观察者,一旦数据产生就会推送给所有观察者。而Flow的冷流特性使其更加灵活,可以根据需要按需产生数据,避免了不必要的计算和资源浪费。...应当强调对于协程中异常处理机制的熟练应用。 参考简答: 在Flow中,异常处理是至关重要的一部分。通过使用catch操作符,可以捕获流中的异常并进行处理。...需要注意的是,catch是在协程上下文中执行的,因此可以使用协程的异常处理机制。

    32321

    Android面试官问协程,你会如何选择应对这些高级问题?

    当协程遇到挂起点时,它会暂停当前执行,而不是阻塞整个线程。挂起的协程将释放线程,让其他协程有机会执行。调度器负责管理协程的执行,并将它们分配给可用的线程。...在协程内部,可以通过isActive属性检查协程是否被取消,然后进行相应的清理工作。 超时取消: 通过withTimeout等函数,可以设置协程的超时时间,一旦超时,协程会被取消。...可以通过CoroutineExceptionHandler来全局处理协程中未捕获的异常。 协程与RxJava的比较 问题: 协程和RxJava在异步编程中有什么异同?...参考简答:协程和RxJava的异同点: 语法: 协程更贴近传统的同步代码,使用async/await等语法,而RxJava使用链式调用的方式。...使用withContext: 通过在协程中使用withContext函数,将代码块切换到指定的线程上,避免多线程访问共享数据。

    39410

    破解 Kotlin 协程(8) - Android 篇

    关键词:Kotlin 协程 Android Anko Android 上面使用协程来替代回调或者 RxJava 实际上是一件非常轻松的事儿,我们甚至可以在更大的范围内结合 UI 的生命周期做控制协程的执行状态...Activity 尽管我们前面体验了 MainScope 发现它可以很方便的控制所有它范围内的协程的取消,以及能够无缝将异步任务切回主线程,这都是我们想要的特性,不过写法上还是不够美观。...View 本身被移除时也会直接将监听中的协程取消掉。...合理使用调度器 在 Android 上使用协程,更多的就是简化异步逻辑的写法,使用场景更多与 RxJava 类似。...那么使用协程就更要注意这个问题了,因为协程切换线程的方式被 RxJava 更简洁,更透明,本来这是好事情,就怕被滥用。

    1.1K31

    使用 Kotlin + WebFluxRxJava 2 实现响应式以及尝试正式版本的协程WebFluxRxJava 2Kotlin 1.3 的 Coroutines总结

    这一次,尝试 WebFlux 以及协程。 首先,在build.gradle中添加插件和依赖的库。...Mono 最多只触发一个事件,它跟 RxJava 的 Single 和 Maybe 类似,所以可以把 Mono 用于在异步任务完成时发出通知。...() ...... } Kotlin 1.3 的 Coroutines 协程(coroutine)相比于线程更加轻量级,协程又称为微线程。...线程和协程的一个显著区别是,线程的阻塞代价是昂贵的,而协程使用了更简单、代价更小的挂起(suspend)来代替阻塞。...另外,Kotlin 1.3 之后的协程已经是正式版本,Kotlin 在语言级别上支持了协程,它是异步编程的另一个不错的选择。

    1.2K10

    从 LiveData 迁移到 Kotlin 数据流

    接下来我们一起比较 LiveData 和 Kotlin 数据流中相对应的写法吧: #1: 使用可变数据存储器暴露一次性操作的结果 这是一个经典的操作模式,其中您会使用协程的结果来改变状态容器: △ 将一次性操作的结果暴露给可变的数据容器...若使用 LiveData,可以将数据流转换为 LiveData 实例,然后通过 emitSource 传递数据的变化。...,把两个流通过 flatMapLatest 结合起来,并且仅将最后的输出转换为 LiveData: class MyViewModel(authManager..., repository...) :...liveData 协程构建器所使用的方法是 添加一个 5 秒钟的延迟,即如果等待 5 秒后仍然没有订阅者存在就终止协程。...replayExpirationMillis 配置了以毫秒为单位的延迟时间,定义了从停止共享协程到重置缓存 (恢复到 stateIn 运算符中定义的初始值 initialValue) 所需要等待的时间。

    1.4K20

    Kotlin协程知识累计

    一、什么是协程 说明:仅限于 JVM和Android上,协程就是一个类似安卓handler和java中线程池的一种线程框架,协程只是对线程高级封装的API,协程的本质还是线程——协程=漂亮的多线程。...async协程默认是等待状态的,创建后不会立即执行会有延迟,但是如果调用.await()方法会立即执行并且是阻塞父协程的;如果设置了启动模式async(start = CoroutineStart.LAZY...6、Flow流:是冷流,就是 Kotlin 协程与响应式编程模型结合的产物,你会发现它与 RxJava 非常像,用于替代RxJava。...2.Flow通过flowOn改变数据发射的线程,数据消费线程则由协程所在线程决定 3.与RxJava类似,支持通过catch捕获异常,通过onCompletion 回调完成 4.Flow没有提供取消方法...,我们可以将线程的职责分成生产者和消费者,并通过消息传递的方式将它们解耦,不需要再依赖共享内存; 3.最后,选择使用消息发送的方式,通过保证同一时间只有一个活跃的线程能够访问数据,能够从设计上天然地避免线程竞争和数据冲突的问题

    23410

    通过Rxjava看Kotlin协程(一)

    我在kotlin的协程使用过程中,其实发现了很多rxjava和协程之间很相似的地方。 如果把两个东西孤立起来学习,我觉得成本太高了。...这个地方只是随手写的啊,可能会有bug的 suspendCoroutine 挂起函数 在异步编程中,回调是非常常见的写法,那么如何将回调转换为协程中的挂起函数呢?...这两个函数就是协程给我们提供的将异步回调写成挂起函数的方式。...但是吧,如果现在让我选,我还是觉得协程真香,毕竟链式调用一旦过长的情况下,其实对于开发的能力要求就越高。而kotlin协程的写法起码看起来更像是顺序执行,可读性和可维护性其实对后续来说会更好一点。...预告 下次我应该会写下关于协程的dispatcher和rxjava的Schedulers,我觉得这两个东西也还是很相似的。

    1.1K31

    Kotlin协程开篇

    // 在延迟后打印输出 } println("Hello,") // 协程已在等待时主线程还在继续 Thread.sleep(2000L) // 阻塞主线程 2 秒钟来保证 JVM...理解这句话的关键在于,协程干了什么,让这个异步操作不会卡主线程? 我们知道类似的技术在RxJava中也有,它通过手动切线程的方式指定代码运行所在的线程,从而达到不卡主线程的目的。...// 在延迟后打印输出 } println("Thread: ${Thread.currentThread().name}") println("Hello,") // 协程已在等待时主线程还在继续...· 假设有一个IO操作 foo() 耗时a,一个计算密集操作 bar() 耗时b,用协程来执行的话,launc{a b} 耗时c,c是否等于a + b? 另外一个很有意思的问题需要用代码来展示。...// 在延迟后打印输出 } println("Thread: ${Thread.currentThread().name}") println("Hello,") // 协程已在等待时主线程还在继续

    90420

    通过RxJava看kotlin协程(二)

    这篇文章主要和大家探讨下关于rxjava的Scheduler和协程的Dispatcher。 这两个东西的用处都是处理线程调度用的。...协程 Dispatcher 释义 协程上下文(coroutine context)包含一个协程调度器(参阅 CoroutineDispatcher),协程调度器 用于确定执行协程的目标载体,即运行于哪个线程...协程调度器可以将协程的执行操作限制在特定线程上,也可以将其分派到线程池中,或者让它无限制地运行。...结论 如果当你基本了解rxjava的调度器的实现的情况下。大胆点以后面试问你kotlin协程是如何实现调度的逻辑,你就把逻辑copy一遍告诉他就好了。...理解RxJava(三)线程调度原理分析 【译】kotlin 协程官方文档(4)-协程上下文和调度器(Coroutine Context and Dispatchers)

    84751

    【Kotlin】协程(一)——入门

    介绍 这里一开始不打算介绍什么是协程,虽然标题叫介绍~~ 为了方便理解,这边先做个比喻: 从使用的角度来看,Kotlin的协程像是“另一种RxJava”,但是比RxJava要高效。...这里先有个大致的印象,先了解下协程在实际中的作用,回头再去看它的原理,或许会更容易些。 一开始查了好多关于协程资料(包括官方完档),发现不同的人说的不大一样,最后越看越乱。...于是我决定一开始先不说什么是协程。 作用 上面说到,协程用起来“像是另一种RxJava”。 那么是不是可以用协程来开启一个异步操作?切换线程? 答案是肯定的,不仅可以做到,而且写起来也很简单。...会发现,getData2()和 getData1()都是延迟1000ms的请求,如果用串行的方式来写,耗时肯定超过2000ms。使用async()耗时也才1051ms。...总结 协程基本的使用到这里就可以告一段落了,主要介绍了协程给我带来了什么,可以在什么场景下用,怎么用。相信这样同步的方式来写异步,这样写出来的代码一定是非常直观、清晰的。 然而,有关什么是协程?

    1.4K20

    快速进阶 Kotlin Flow:掌握异步开发技巧

    Kotlin Flow 的实现原理基于 Kotlin 协程的基础设施。...Kotlin Flow 集成了 Kotlin 协程的取消机制,使得取消操作变得简单而高效。 使用协程作用域 在 Flow 中进行取消操作时,建议使用协程作用域来确保操作的一致性。...协程集成 Kotlin Flow 是 Kotlin 协程的一部分,因此它天生与 Kotlin 协程无缝集成。这意味着你可以在同一个代码块中使用协程和 Flow,实现更加一致和清晰的异步编程。...RxJava 也提供了与协程集成的方式,但与 Kotlin Flow 相比,可能需要更多的适配和配置。 冷流与热流 Kotlin Flow 支持冷流和热流的概念,这有助于惰性计算和资源优化。...两者的使用方式相似,但 Kotlin Flow 可以更加自然地与协程集成,避免了额外的配置。 背压处理 RxJava 提供了丰富的背压处理策略,例如缓存、丢弃、最新值等。

    1.3K30

    Kotlin 学习笔记(五)—— Flow 数据流学习实践指北(一)

    Flow 是以协程为基础构建的,所以它可通过异步的方式处理一组数据,所要处理的数据类型必须相同,比如:Flow是处理整型数据的数据流。...,作用域在哪儿都可以,但 collect 收集的时候就需要放在协程里了,因为 collect 是个挂起函数。...它是个挂起函数,需要在协程作用域中调用;并且它是一个末端操作符,末端操作符就是实际启动 Flow 执行的操作符,这一点跟 RxJava 中的 Observable 对象的执行很像。...当 flowOn 操作符之前没有设置任何的协程上下文,那么 flowOn 操作符可以为它之前的操作符设置执行所在的线程,并不会影响它之后下游的执行所在线程。...不同的是 Flow 是将接收到的数据放到 Flow 载体中,而 RxJava 一般将数据放到 Observable 对象中;Flow 处理数据更加方便和自然,去除了 RxJava 中繁多且功能臃肿的操作符

    1.7K10
    领券