我正在编写一个简单的 Android 应用程序,它需要在后台执行长时间运行的任务,然后返回该响应(任务长度最多为 10 分钟)。Kotlin 中似乎有数十种运行异步任务的方法,所有这些方法都有自己奇怪的怪癖。
我希望它工作的方式(用于测试)是创建一个带有标题和值的行。它应该在后台启动异步任务时放入该值的占位符文本。任务完成后,我希望值会更新。不需要与应用程序进行任何用户交互。
我尝试使用 LaunchedEffect 来做到这一点,因为这似乎是最简单的技术,使用可组合函数,例如:
@Composable
fun addLine(name: String, pwd: String)
{
Row
{
var output: String="Not Found"
Text(name)
LaunchedEffect(Unit)
{
val guess: String=bruteforce(pwd)
if (guess != "")
{
# Value to update the text to
output=guess
}
}
# This is the text the needs to change
Text(output)
}
}
我无法找到任何简单的方法来做到这一点,所有易于通过 Google 搜索的示例都需要用户交互或多个额外步骤或奇怪的自定义库。这应该是一项微不足道的任务,并且在其他框架中,但完全击败了我。
我并不太在意是否应该这样做——我只是想要一种简单的机制,用异步执行的值来更新一个或多个文本字段。复杂的任务只会执行一次。
您启动一个协程作用域并运行您的代码。您可以使用 来维持状态
output
。如果您output
根据结果进行更新,Text
则会更新。这是实现目标的简单方法。但是,在这种类型的逻辑中,如果您的addLine
compose 函数经历了完全重构,则需要 10 分钟才能执行的代码可能需要重新启动。viewModel
对于更强大的解决方案,使用 a和 a更有意义stateFlow
。但是,由于您特别要求最简单的逻辑,所以我这样实现