kotlin-coroutines相关内容

使用 Retrofit、Coroutines 和 Suspend 函数的并行请求

我正在使用 Retrofit 来发出一些网络请求.我还将协程与“暂停"功能结合使用. 我的问题是:有没有办法改进以下代码.这个想法是并行启动多个请求并等待它们全部完成,然后再继续该功能. lifecycleScope.launch {尝试 {itemIds.forEach { itemId ->withContext(Dispatchers.IO) { itemById[itemId] = ..
发布时间:2021-12-10 17:42:25 移动开发

Kotlin:withContext() 与异步等待

我一直在阅读 kotlin 文档,并且如果我理解正确,这两个 Kotlin 函数的工作方式如下: withContext(context):切换当前协程的上下文,当给定块执行时,协程切换回之前的上下文. async(context):在给定的上下文中启动一个新的协程,如果我们在返回的 Deferred 任务上调用 .await(),它将挂起调用协程,并在生成的协程内执行的块返回时恢复. ..
发布时间:2021-12-10 17:39:51 其他开发

如何在 Kotlin 协程中使用依赖于 ThreadLocal 的代码

某些 JVM 框架使用 ThreadLocal 来存储应用程序的调用上下文,例如 SLF4j MDC、事务管理器、安全管理器等. 但是,Kotlin 协程是在不同的线程上分派的,那么它如何才能工作呢? (问题的灵感来自 GitHub 问题) 解决方案 Coroutine 与 ThreadLocal 的类比是 CoroutineContext. 要与 ThreadLocal ..
发布时间:2021-12-10 17:23:26 其他开发

Kotlin 协程的现有 3 函数回调

我有一个带有具体示例的一般性问题:我想在拍照时使用 Kotlin 协程魔法而不是 Android 中的回调地狱. manager.openCamera(cameraId, object : CameraDevice.StateCallback() {覆盖乐趣 onOpened(openedCameraDevice: CameraDevice) {println("相机打开")//使用openCa ..
发布时间:2021-12-10 17:20:20 移动开发

AsyncTask 作为 kotlin 协程

AsyncTask 的典型用途:我想在另一个线程中运行一个任务,该任务完成后,我想在我的 UI 线程中执行一些操作,即隐藏进度条. 任务将在 TextureView.SurfaceTextureListener.onSurfaceTextureAvailable 中开始,完成后我想隐藏进度条.同步执行此操作不起作用,因为它会阻止构建 UI 的线程,使屏幕变黑,甚至不显示我之后想隐藏的进度条. ..

Kotlin 协程`runBlocking`

我正在学习 Kotlin 协程.我读过 runBlocking 是桥接同步和异步代码的方法.但是,如果 runBlocking 停止 UI 线程,性能增益是多少?比如我需要在Android中查询一个数据库: val 结果:Intget() = runBlocking { queryDatabase().await() }private fun queryDatabase(): Deferred ..
发布时间:2021-12-10 17:10:57 移动开发

如何在 Retrofit 中创建用于挂起函数的调用适配器?

我需要创建一个可以处理此类网络调用的改造调用适配器: @GET("用户")暂停乐趣 getUser(): MyResponseWrapper 我希望它在不使用 Deferred 的情况下与 Kotlin 协程一起工作.我已经有一个使用Deferred的成功实现,它可以处理如下方法: @GET("用户")fun getUser(): Deferred> 但我希望能够使函数成为挂起函数并删除 ..
发布时间:2021-12-10 17:09:43 Java开发

可以“实验"吗?Kotlin 协程可以在生产中使用吗?

Kotlin 协程可以在生产中使用吗,它们的实验状态意味着什么? 解决方案 UPDATE:Kotlin 协程从 Kotlin 1.3 开始不再是实验性的. Kotlin 协程可以并且应该在生产中使用.这是在 Kotlin 1.1 中正式发布它们的主要原因.发布它们后,JetBrains 团队承诺在次要版本的发展过程中保持对在次要版本中引入的任何更改的向后兼容性,同时允许人们在复杂的生 ..
发布时间:2021-12-10 17:09:23 其他开发

如何进行“不适当的阻塞方法调用"合适的?

我目前正在尝试更多地利用 kotlin 协程.但我面临一个问题:在这些协程中使用 moshi 或 okhttp 时,我收到警告: “不恰当的阻塞方法调用" 解决这些问题的最佳方法是什么?我真的不想不合适;-) 解决方案 警告是关于阻塞当前线程和协程的方法无法正确挂起.这样,您将失去协程的所有好处,并再次降级为每个线程一个作业. 每种情况都应以不同的方式处理.对于可挂起的 ..
发布时间:2021-12-10 17:08:01 其他开发

协程:runBlocking 与 coroutineScope

我正在阅读 Coroutine Basics 试图理解和学习它.> 这里有一段代码: fun main() = runBlocking {//this: CoroutineScope发射 {延时(200L)println("来自runBlocking的任务")}coroutineScope {//创建一个新的协程作用域发射 {延迟(900L)println("来自嵌套启动的任务")}延迟(10 ..
发布时间:2021-12-10 17:07:15 其他开发

Kotlin 中线程和协程的区别

Kotlin 中是否有任何特定语言实现,它与协程的其他语言实现不同? 协程就像轻量级线程是什么意思? 有什么区别? kotlin 协程实际上是并行/并发运行的吗? 即使在多核系统中,在任何给定时间也只有一个协程在运行(对吗?) 这里我启动了 100000 个协程,这段代码背后发生了什么? for(i in 0..100000){异步(公共池){//运行长时间运行的操作}} 解 ..
发布时间:2021-12-10 17:06:28 其他开发

如何使用 Kotlin 协程使 setOnClickListener 去抖动 1 秒?

当用户快速点击按钮时,showDialog() 方法会在彼此的顶部显示多次,因此当您关闭它时,它后面还有另一个.我正在寻找一种方法来忽略第二次点击 1 秒而不使用处理程序或检查前一次点击的时间. //打开对话框的按钮button.setOnClickListener {显示对话框()} 我正在寻找使用 Kotlin 协程或 Kotlin 流程的解决方案以供将来实现. 解决方案 最好使用 ..
发布时间:2021-12-10 17:04:37 移动开发

Kotlin 协程中的 launch/join 和 async/await 有什么区别

在 kotlinx.coroutines 库中,您可以使用 launch(使用 join)或 async 启动新的协程>(带有 await).它们之间有什么区别? 解决方案 launch 用于触发和忘记协程.这就像开始一个新线程.如果 launch 中的代码因异常而终止,那么它在线程中被视为未捕获异常——通常在后端 JVM 应用程序中打印到 stderr 并使 Android 应用程序 ..
发布时间:2021-12-10 16:51:42 其他开发

在 Java 类中调用 Kotlin 挂起函数

假设我们有以下挂起函数: suspend fun doSomething(): List{ ... } 如果我想在我现有的 Java 类之一(我现在无法将其转换为 Kotlin)中调用此函数并获取其返回值,我必须提供一个 Continuation> 作为其参数(显然). 我的问题是,我怎样才能实现一个.特别是它的 getContext getter. 解决方案 首先,将 org. ..
发布时间:2021-12-10 16:50:46 Java开发

为什么不使用 GlobalScope.launch?

我读到非常不鼓励使用 Globalscope,此处. 我有一个简单的用例.对于我收到的每条 kafka 消息(假设是一个 Id 列表),我必须拆分它并同时为每个 Id 调用一个休息服务,然后等待它完成并继续执行其他同步任务.该应用程序中没有其他东西需要协程.在这种情况下,我可以使用 Globalscope 吗? 注意:这不是安卓应用程序.它是一个运行在服务器端的 kafka 流处理器. ..
发布时间:2021-12-10 16:47:23 其他开发

Kotlin 协程中的挂起函数是什么意思?

我正在阅读 Kotlin Coroutine 并且知道它基于 suspend 函数.但是suspend是什么意思? 协程或函数被挂起? 来自 https://kotlinlang.org/docs/reference/coroutines.html 基本上,协程是可以在不阻塞线程的情况下挂起的计算 我听到人们常说“暂停功能".但我认为是协程因为等待函数完成而被暂停?“暂停" ..
发布时间:2021-12-10 16:45:08 其他开发

作为 Kotlin 中函数的结果,如何从 Firestore 数据库中返回列表?

我正在为朋友开发一个应用,我使用 Firestore.我想要的是显示最喜欢的地方列表,但由于某种原因,列表总是空的. 我无法从 Firestore 获取数据.这是我的代码: fun getListOfPlaces() : List{val 位置 = ArrayList()PlacesRef.get().addOnCompleteListener { 任务 ->如果(task.isSucce ..

单元测试新的 Kotlin 协程 StateFlow

最近介绍 类 StateFlow 作为 Kotlin 协程的一部分. 我目前正在尝试,但在尝试对我的 ViewModel 进行单元测试时遇到问题.我想要实现的目标:测试我的 StateFlow 是否在我的 ViewModel 中以正确的顺序接收所有状态值. 我的代码如下: 视图模型: class WalletViewModel(private val getUserWallet ..