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

Kotlin + + Retrofit + MVVM优雅实现网络请求

这次使用到+ retrofit +mvvm模式,我这儿直接用一个简单demo来看一下具体实现方式吧。...,实际项目中基本上都会封装之后再使用,也为了提高代码可读性,降低各部分耦合性, 通俗点来说,只有各司其职才能把工作干好嘛,接下来咱们就围绕着各司其职来一个一个实现 实现 接下来把上面的请求换成方式来实现...网络请求中,并且在IO调度单元,所以不用担会阻塞主线程 + ViewModel + LiveData实现 上面也只是简单实现,只不过是换成了,在项目中,还可以进一步封装,方便使用前面也提到了...因为在进行请求过程中,若此时ViewModel销毁,里面的正在请求的话,将无法销毁,出现内存泄漏,所以在ViewModel onCleared 里面,即使结束任务,参考代码如下。...,就两句话,一句发起请求val result = repository.getDatas(),然后就是为我们LiveData赋值了,看起有没有同步代码感觉,这就是魅力所在,为了验证我们请求没有阻塞主线程

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

Android7个必要知识点

不同线程上执行 使用不同调度器,我们可以在不同线程上执行代码,从而优化并发处理和性能。...合理使用不同调度器,可以使不同线程上高效地执行,从而实现并发处理和性能优化。...挂起函数概念 挂起函数是具有suspend关键字修饰函数,它可以在内部被挂起,等待某个操作完成后再继续执行。典型例子包括网络请求、文件读写、数据库查询等异步操作。...通过合理地创建作用域并结合结构化并发,我们可以避免资源泄漏、提高代码可读性,并确保在正确上下文中执行,为异步编程带来更多便利。...下面将深入介绍如何使用来处理并发任务和顺序性操作,以及如何在不同场景中组合多个协执行流程。 并发任务 使并发任务管理变得非常直观。

40540

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

为了能够避免泄漏,Kotlin 引入了结构化并发 (structured concurrency) 机制,它是一系列编程语言特性和实践指南结合,遵循它能帮助您追踪到所有运行于任务。...推荐您阅读 Android 开发者文档 "将 Kotlin 与架构组件一起使用" 了解更多。...但有时候,可能会遇到稍微复杂点问题,例如您需要在一个中同时处理两个网络请求,这种情况下需要启动更多。...Kotlin 确保使用 coroutineScope 构造器不会让 fetchTwoDocs 发生泄漏,coroutinScope 会先将自身挂起,等待它内部启动所有完成,然后再返回。...结构化并发保证当一个出错时,它调用方作用域会被通知到。 如果您按照结构化并发规范去编写上述代码,错误就会被正确地抛给调用方处理。

1.4K20

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

线程并发” 只有在线程数量 处理器数量时,会出现一个处理器运行多个线程情况。...比线程更加轻量级,可以由程序员自己管理轻量级线程,对内核不可见。 目的 在传统 J2EE 系统中都是基于每个请求占用一个线程去完成完整业务逻辑(包括事务)。...这里耗时其实是让 CPU 一直在等待 I/O 返回,说白了线程根本没有利用 CPU 去做运算,而是处于空转状态。而另外过多线程,也会带来更多 ContextSwitch 开销。...特点 线程切换由操作系统负责调度,由用户自己进行调度,减少了上下文切换,提高了效率 线程默认 Stack 是1M,更加轻量,是 1K,在相同内存中可以开启更多。...633265-20201211165837001-1582226810.jpg 当A调用暂停方法被阻塞时,A会进入到挂起队列,调度器会调用等待队列中其它抢占线程A执行。

75330

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

线程并发” 只有在线程数量 处理器数量时,会出现一个处理器运行多个线程情况。...比线程更加轻量级,可以由程序员自己管理轻量级线程,对内核不可见。 目的 在传统 J2EE 系统中都是基于每个请求占用一个线程去完成完整业务逻辑(包括事务)。...这里耗时其实是让 CPU 一直在等待 I/O 返回,说白了线程根本没有利用 CPU 去做运算,而是处于空转状态。而另外过多线程,也会带来更多 ContextSwitch 开销。...特点 线程切换由操作系统负责调度,由用户自己进行调度,减少了上下文切换,提高了效率 线程默认 Stack 是1M,更加轻量,是 1K,在相同内存中可以开启更多。...当A调用暂停方法被阻塞时,A会进入到挂起队列,调度器会调用等待队列中其它抢占线程A执行。

25110

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

线程并发” 只有在线程数量 处理器数量时,会出现一个处理器运行多个线程情况。...比线程更加轻量级,可以由程序员自己管理轻量级线程,对内核不可见。 目的 在传统 J2EE 系统中都是基于每个请求占用一个线程去完成完整业务逻辑(包括事务)。...这里耗时其实是让 CPU 一直在等待 I/O 返回,说白了线程根本没有利用 CPU 去做运算,而是处于空转状态。而另外过多线程,也会带来更多 ContextSwitch 开销。...特点 线程切换由操作系统负责调度,由用户自己进行调度,减少了上下文切换,提高了效率 线程默认 Stack 是1M,更加轻量,是 1K,在相同内存中可以开启更多。...当A调用暂停方法被阻塞时,A会进入到挂起队列,调度器会调用等待队列中其它抢占线程A执行。

99131

使用kotlin提高app性能(译)

是一种并发设计模式,您可以在Android上使用它来简化异步执行代码。Kotlin1.3版本添加了 Coroutines,并基于其他语言既定概念。...即使代码看起来像普通顺序阻塞请求也可以确保网络请求避免阻塞主线程。 Use coroutines for main-safety Kotlin使用调度程序来确定哪些线程用于执行。...async启动一个新协同程序,并允许您使用名为await挂起函数返回结果。 通常,您应该从常规函数启动新,因为常规函数无法调用等待。...通过Kotlin结构化并发,您可以定义一个启动一个多个协同程序coroutineScope。...此外,coroutineScope捕获抛出任何异常并将它们路由回调用者。 有关并行分解更多信息,请参阅编写挂起函数。

2.3K10

写给Android工程师指南

故此,在本篇,我们将由浅入深,系统且全面的聊聊 Kotlin 思想及相关问题,从而帮助大家更好理解。 本篇没有难度定位、更多是作为一个 Kotlin 使用者基本技术铺垫。...它不依赖操作系统调度,而是由用户自己控制执行。程之间切换只需要保存和恢复少量状态,开销较小。通信和数据共享方式比线程更加灵活,通常使用消息传递共享状态方式实现。...在不同场景下,可以根据需要选择使用不同并发处理方式。 那Kotlin呢?...在相应 getMessages() 方法上,我们增加了 suspend 标记,并在内部使用withContext(Dispatcher.IO) 将当前上下文环境切换到IO中,用于延迟等待(假设网络请求...从原理上而言,Mutex 是通过 一个 AtomicInteger 类型状态记录锁状态(是否被占用),并使用一个 ConcurrentLinkedQueue 类型队列来持有 等待持有锁 ,从而解决多个协并发同步问题

1.3K40

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

Kotlin Flow 实现原理基于 Kotlin 基础设施。...允许在函数执行过程中挂起,等待某些条件满足后恢复执行。Flow 利用了这一特性来实现数据流处理。 在 Flow 内部,数据流被建模为一系列悬挂函数调用。...Kotlin Flow 集成了 Kotlin 取消机制,使得取消操作变得简单而高效。 使用作用域 在 Flow 中进行取消操作时,建议使用作用域来确保操作一致性。...集成 Kotlin Flow 是 Kotlin 一部分,因此它天生与 Kotlin 无缝集成。这意味着你可以在同一个代码块中使用和 Flow,实现更加一致和清晰异步编程。...RxJava 也提供了与集成方式,但与 Kotlin Flow 相比,可能需要更多适配和配置。 冷流与热流 Kotlin Flow 支持冷流和热流概念,这有助于惰性计算和资源优化。

66030

干货 | KotlinNative 异步并发模型初探

Kotlin/Native与 Kotlin/JVM 异步并发模型也有着极大不同,因此如果要实践 Kotlin Multiplatform,则事先对 Kotlin/Native异步并发模型进行探究就显得很有必要...相较于 Kotlin/Native,Kotlin/JVM 也许为更多的人所熟知。基于 JVM 异步并发机制,Kotlin/JVM 提供了通过编译器与线程池实现来完成异步并发任务。...Kotlin/JVM 既能完成异步请求,也能完成并行计算,并且由于中拥有挂起(suspend),Kotlin/JVM 就可以在而非线程层面上来解决并发竞争问题。...2)Kotlin/Native 自身提供给了我们两套异步并发 API,首先是,但 Kotlin/Native Kotlin/JVM区别很大,Kotlin/Native 是单线程...,也就是说它只能用来执行一些不占用 CPU 资源异步并发任务,例如网络请求

1.6K20

Kotlin 总结

设计初衷是为了解决并发问题,让 「协作式多任务」 实现起来更加方便。 就是 Kotlin 提供一套线程封装 API,但并不是说就是为线程而生。...就像 Java 中Executor 和 Android 中AsyncTask,Kotlin也有对 Thread API 封装,让我们可以在写代码时,不用关注多线程就能够很方便地写出并发操作...最常用功能是并发,而并发典型场景就是多线程。...如果只是使用 launch 函数,并不能比线程做更多事。不过中却有一个很实用函数:withContext 。...所以我们想要自己写一个挂起函数,仅仅只加上 suspend 关键字是不行,还需要函数内部直接间接地调用到 Kotlin 框架自带 suspend 函数才行。 3.suspend 意义?

2.1K10

在 Android 开发中使用 | 代码实战

一次性请求模式 这是在 Android 架构组件中使用进行一次性请求完整模式,我们将添加到了 ViewModel、Repository 和 Room 中,每一层都有着不同责任分工。...数据层 (网络数据库) 总是会提供挂起函数,使用 Kotlin 时候要保证这些挂起函数是主线程安全,Room 和 Retrofit 都遵循了这一点。...有三个基本模式可以让我们确保在同一时间只会有一次请求进行: 在启动更多程之前取消之前任务; 让下一个任务排队等待前一个任务执行完成; 如果有一个任务正在执行,返回该任务,而不是启动一个新任务。...直接复用之前任务可以有效避免重复网络请求。 下一步 在这篇文章中,我们探讨了如何使用 Kotlin 来实现一次性请求。...最简单 (往往也是最好) 方案就是从 UI 上直接更改,排序运行时直接禁用按钮。 最后,我们探讨了一些高级并发模式,并介绍了如何在 Kotlin 中实现它们。

1.1K10

Kotlin 】Flow 异步流 ⑤ ( 流上下文 | 上下文保存 | 查看流发射和收集 | 不能在不同中执行流发射和收集操作 | 修改流发射上下文 | flowOn函数 )

文章目录 一、流上下文 1、上下文保存 2、流收集函数原型 3、流发射函数原型 4、代码示例 - 查看流发射和收集 5、代码示例 - 不能在不同中执行相同流发射和收集操作 二、修改流发射上下文...1、Flow#flowOn 函数原型 2、代码示例 一、流上下文 ---- 1、上下文保存 Flow 异步流 收集元素 操作 , 一般是在 上下文 中进行 , 如 : 在中调用 Flow...中代码 , 收集元素操作在中执行 , 流构建器 也同样在相同中运行 ; 流收集元素 和 发射元素 在相同上下文中 属性 , 称为 上下文保存 ; 2、流收集函数原型 Flow#collect...I/System.out: 1 2022-12-23 14:29:07.940 17484-17484/kim.hsl.coroutine I/System.out: 2 5、代码示例 - 不能在不同中执行相同流发射和收集操作...BUFFERED]缓冲区大小 * 在两个协程之间,类似于[buffer]操作符,除非显式调用[buffer]操作符 * 在' flowOn '之前之后,请求缓冲行为并指定通道大小。

84510

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

Kotlin提供了一种全新处理并发方式,您可以在 Android 平台上使用它来简化异步执行代码。...通常我们把这类操作归类为耗时任务 —— 应用会停下并等待它们处理完成,这会耗费大量时间。 当今手机处理代码速度要远快于处理网络请求速度。...get 方法是如何做到不等待网络请求和线程阻塞而返回结果?其实,是 Kotlin提供了这种执行代码而不阻塞主线程方法。 在常规函数基础上新增了两项操作。...如果需要处理一个函数,且这个函数在主线程上执行太耗时,但是又要保证这个函数是主线程安全,那么您可以让 Kotlin 在 Default IO 调度器上执行工作。...同时,在这个原则下也可以被主线程自由调用,网络请求数据库操作代码也变得非常简洁,还能确保用户在使用应用过程中不会觉得 “卡”。

1.5K30

精通必会十一个高级技巧

在本文中,我们将探讨高级技巧,帮助您更好地处理复杂并发需求,提高性能和可维护性。 介绍 Kotlin一项强大特性,它使并发编程更加直观、简单。...并发限制 原理 在某些情况下,限制同时运行数量是必要,以控制并发操作。这有助于避免系统资源被过度消耗,防止过多任务同时执行。...这有助于确保最多只有3个可以同时执行需要限制并发操作。 异常处理策略 原理 在中,异常处理是至关重要,因为异步操作可能会失败抛出异常。...这有助于确保应用程序不会因为长时间等待而变得不响应。 使用SupervisorJob 原理 在中,如果一个失败,通常会导致整个父及其子都被取消。...SupervisorJob 是一种特殊 Job,它允许子失败时只取消该子,而不影响其他子

25940

Kotlin 实现原理解析

Kotlin 是一种在 Kotlin 语言中实现并发编程强大工具。它提供了一种轻量级线程管理方式,使得开发者能够以接近同步代码方式编写异步代码。...上下文中元素包括调度器、Job、名称等。调度器决定了在哪个线程线程池上执行,Job用于控制生命周期,可以取消协检查其状态。...在结构化并发中,可以使用coroutineScope函数创建一个新作用域,它会等待所有启动完成后才会继续执行。...调度器是上下文一部分,可以在启动时指定,dispatch 方法负责将执行调度到适当线程。。调度器使得可以适应不同执行需求,提高了应用程序性能和响应性。...通过这些机制,Kotlin 能够在不阻塞线程情况下挂起和恢复执行,从而实现高效并发编程。

30010

即学即用Kotlin -

前言 上周在内部分享会上大佬同事分享了关于 Kotlin 知识,之前有看过 Kotlin 一些知识,以为自己还挺了解,结果......Kotlin - 基础篇》 《抽丝剥茧Kotlin - Flow篇》 目录 一、基础 1....九心:下单 5min > 等待(等待时候可以工作) 30min > 就餐 30min 外卖骑手:到店 > 取餐 > 送外卖 从九心吃饭例子可以看出,如果点了外卖,九心花费时间较少了,可以空闲出更多时间做自己事...常见场景有: 耗时操作:使用 withContext 切换到指定 IO 线程去进行网络或者数据库请求等待操作:使用delay方法去等待某个事件。...参考文章: “《最全面的Kotlin: Coroutine/Channel/Flow 以及实际应用》 《Kotlin中文站》 《Kotlin 用力瞥一眼》

1.5K20

《Kotin 极简教程》第9章 轻量级线程:(2)《Kotlin极简教程》正式上架:

9.10.2 关闭通道和迭代遍历元素 与队列不同, 通道可以关闭, 以指示没有更多元素。在接收端, 可以使用 for 循环从通道接收元素。...9.14 好处 与多线程、多进程等并发模型不同依靠user-space调度,而线程、进程则是依靠kernel来进行调度。...关于工作原理更多细节可以在这个设计文档中找到:https://github.com/Kotlin/kotlin-coroutines/blob/master/kotlin-coroutines-informal.md...关于这些 API 用法更多细节可以参考相关文档。 本章小结 本章我通过大量实例学习了用法;同时了解了作为轻量级线程是怎样简化我们多线程并发编程。...我们看到通过挂起机制实现非阻塞特性大大提升了我们并发性能。 最后,我们还简单介绍了实现原理以及标准API库。Kotlin实现大量地调用了Java中多线程API。

1.2K20
领券