首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >安卓。Kotlin流:如何取消倒计时?

安卓。Kotlin流:如何取消倒计时?
EN

Stack Overflow用户
提问于 2022-07-14 09:13:14
回答 1查看 244关注 0票数 0

我有一个kotlin流量计时器。这是我的代码:

代码语言:javascript
运行
复制
class CountDownTimer {
    suspend fun startTimer(value: Int, onTick: OnTickCallback, onFinish: OnFinishCallback) {
onTick.invoke(0)
        (1..timerValue)
            .asSequence()
            .asFlow()
            .onEach {
                delay(DELAY)
                onTick.invoke(it)
            }
            .onCompletion {
                onFinish.invoke()
            }
            .cancellable()
            .collect()
}
}

一切运行良好,但有时我会启动一个新计时器,但目前的计时器还没有完成。所以我想取消计时器,如果我启动一个新的。我知道,为此,我需要得到一个Job,并在上面调用一个cancel()。但我不能创造工作,因为我没有CoroutineScope。是的,我可以在类CountDownTimer的构造函数中插入作用域,但是我需要将计时器附加到viewModelScope。

因此,我在viewModelScope中的视图模型中启动计时器。

代码语言:javascript
运行
复制
   viewModelScope.launch {
            countDownTimer.startTimer(
                60,
                onTick= { // some logic },
                onFinish= { // some logic }
            )
        }

现在,我可以在开始计时器取消()作业之前获得模型。

但是事实证明,我必须将作业对象存储在视图模型中,这样做正确吗?也许还有更自动化的方法来取消一份工作。或者我最好把其他的CoroutineScope注入到我的CountDownTimer中,那么问题是CoroutineScope应该是什么?

求你帮帮我。

EN

回答 1

Stack Overflow用户

发布于 2022-07-14 12:38:03

viewModelScope.launch {}是一份工作。您可以将它保存到变量中,并随时取消它。将其存储在viewmodel中是可以的。

代码语言:javascript
运行
复制
val job = viewModelScope.launch { ... }

job.cancel()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72978051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档