在Android应用程序实现中使用Kotlin时,我遇到了这个问题。我必须覆盖aar中的一个函数,所以我不能更改它。它是一个非挂起函数。
// from the aar
class A{
fun doSomething()
}
但是我必须覆盖这个函数并调用suspend函数。像这样
class B() : A{
overwrite fun doSomething(){
// **I want to call a suspend function here**
}
}
我是Kotlin的新手。据我所知,我可以使用 runBlocking 来让它工作。在这方面还有其他想法吗?
顺便问一下,协程的缺点是什么?
- Kotlin文档说它会保存内存。我们可以尽可能多地创建它。
Kotlin与其他语言(C++,Go)有什么不同?
在代码中使用runBlock
2条答案
按热度按时间wbgh16ku1#
你有两个选择:
1.使用
runBlocking
,但它会阻塞你的函数。你的库必须能够处理这个函数是一个阻塞函数。这可能是好的,但如果库在主线程上调用这个函数,这将是一个问题。1.从这个函数启动一个协程,它将异步运行代码。当协程异步启动时,函数将立即返回,并将在未来某个时间完成。如果您不需要等待结果,这个解决方案是可以的。
如果你启动了一个协程,请确保你使用了一个合适的协程范围,这样你就不会泄漏内存。阅读Kotlin协程文档,了解协程范围的含义。基本上,当一个协程范围被取消时,它启动的所有仍在运行的协程也会被取消。所以,当你启动一个协程时,你想使用一个会在适当的时候被取消的作用域,以避免内存泄漏。例如,在Android Fragment中,使用
viewLifecycleOwner.lifecycleScope
来启动捕获对视图的引用的协程,并且这将防止那些协程泄漏视图。dgsult0t2#
如果你使用runBlocking,它会阻塞当前线程。但是,你可以使用GlobalScope如下。
runBlockingGlobalScope