问题标签 [coroutinescope]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
671 浏览

android - 从 ViewModel 的 onCleared 中取消所有待处理的 Kotlin 作业

使用 Kotlin 1.3 可以启动作业,GlobalScope.launch但我似乎无法弄清楚的一件事是如何跟踪Job“GlobalScope.launch”返回并取消所有挂起的作业(如果它们处于活动状态)。

在旧版本中,launch可以指定parent = parentJob并且可以简单地取消 parentJob。但是,当使用GlobalScope.launch如何取消所有待处理的作业时(很容易),所以从 ViewModel 的 onCleared 来看,可以取消所有待处理的东西。

0 投票
2 回答
1584 浏览

android - 协程中的范围混淆

我有一个用例,我想使用协程,但有点困惑如何实现它。

具有范围并绑定到 UI 生命周期并从存储库调用 API 的 ViewModel:

存储库使用协程构建网络调用,如下所示:

用例是,一旦从 ViewModel 调用 API,就需要始终完全执行存储库功能,因为我们需要捕获来自服务器的所有网络响应。

如何确保始终执行存储库中的协程,但一旦清除视图模型,将取消 ViewModel 协程以避免内存泄漏?

0 投票
3 回答
4610 浏览

android - Kotlin 协程返回字符串

我正在尝试将方法从 java 转换为 kotlin 并替换AsyncTask为协程,但我不知道如何从协程返回值

这是我的方法

返回 outputFile的行编译出错,谁能帮忙,这是我第一次使用协程

编辑

这是使用挂起后的方法,但是现在我不知道如果发生任何问题我该如何返回值

编辑 2

你的意思是这样

并称它为

0 投票
3 回答
41966 浏览

android - 挂起函数“callGetApi”只能从协程或另一个挂起函数中调用

我正在从 onCreate(...) 调用挂起函数

和暂停的功能是: -

但是错误显示暂停函数'callGetApi'应该只从协程或另一个暂停函数中调用

0 投票
1 回答
1920 浏览

android - 非生命周期类中的 Kotlin 协程范围和作业取消

如何在没有生命周期的类(如存储库)中使用新的 Kotlin v1.3 协程?我有一个类,我检查缓存是否过期,然后决定是从远程 API 还是本地数据库中获取数据。我需要从launch那里开始async。但是那我怎么取消工作呢?

示例代码:

}

0 投票
1 回答
1342 浏览

android - Dispatchers.IO 协程的线程

我正在学习 Android 中的协程。我有以下代码:

我预计userDataSource.saveApiToken(token)将从单独的线程中调用它,但它在主线程上运行(Looper.myLooper() == Looper.getMainLooper() 在方法内返回 true)。可能是什么原因?[我的错]

我正在使用 Kotlin 插件版本:1.3.11-release-Studio3.2-1 和以下依赖项:kotlinx-coroutines-core:1.0.1 和 kotlinx-coroutines-android:1.0.1

0 投票
2 回答
2623 浏览

multithreading - 如何将协程直接分派到 JVM 上的主线程?

我正在为 jvm 建立一个基于 kotlin 协程的网络框架。Client 和 Server 类实现 CoroutineScope,coroutinecontext 的覆盖是 Dispatchers.IO,因为我很确定这是用于这种情况的正确 Dispatcher。但是,我希望在主线程上处理读取数据包,或者至少提供该选项。在没有阅读文档的情况下,我使用了 Dispatchers.Main,我现在意识到它是用于 android UI 线程的。有没有我可以用来让协程在主线程上运行的调度程序?如果没有,我将如何制作一个?

我查看了有关如何基于单个线程创建调度程序的 kotlin 文档,但除了创建新线程的 newSingleThreadContext 之外我找不到任何东西。我还发现可以从 java Executor 创建调度程序,但我仍然不确定如何将其限制为已经存在的线程。

因此,使用 Dispatchers.Main 由于缺少 android 组件,我得到了 IllegalStateException。有没有办法创建一个调度程序来阻止主线程直到它完成(就像 runBlocking 一样?)谢谢!

0 投票
2 回答
1489 浏览

android - Kotlin CoroutineScope 初始化依赖于 CoroutineContext 和自定义 getter

google codelab Android Room with a View - Kotlin有以下代码段

根据我从这个答案中了解到的情况,每次都会评估自定义 getter,而仅在构建时评估分配。所以实际上,scope会采用一个以后不会改变的值,那么自定义 getter 有什么用coroutineContext

0 投票
1 回答
189 浏览

android - cant launch coroutine builder

I just created a new project and added a simple empty coroutine just to check if things were fine .

I get this crash

My build.gradle

You guys can attempt to the same. Just create a new empty project and add the empty coroutine

0 投票
1 回答
4605 浏览

kotlin - kotlin coroutine - 在协程内部调用时如何确保某些命令在 UI 主线程上运行?

我有一个非常简单的协程,它只是做一些延迟,然后我想要它做的是将命令发布到 UI 消息队列。所以在 UI 线程上运行最后两行。这是协程:

我希望最后两个方法 doSomething() 和 doAnotherThing() 在 UI 线程上运行?如何才能做到这一点 ?从我读过的内容来看,延迟(5000)将自动异步运行,但如何让其余部分在 UI 线程上运行?非常清楚,我是从一个从主线程启动的对象中执行此操作的。