当前位置: 首页 > 知识库问答 >
问题:

Kotlin-无限但可取消定时器

通博实
2023-03-14

目前有这种方法

repeat(10000) { i -> delay(1000L) }

但是我怎么能有一个重复的执行与以下要求。

  1. 递归
  2. 无限时间/执行,但可以使用其公共方法取消。

共有2个答案

弓明亮
2023-03-14

使用Kotlin协程,您可以像这样创建。

class MainActivity : AppCompatActivity(),CoroutineScope by MainScope() {
    
        lateinit var binding: ActivityMainBinding
        private var job: Job? = null
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            binding= ActivityMainBinding.inflate(layoutInflater)
            setContentView(binding.root)
            startInfiniteExecution()
        }
    
        fun startInfiniteExecution() {
            job = launch {
                while(true) {
                    doYourTask()
                    delay(1_000)
                }
            }
        }
    
        fun cancelTask() {
            job?.cancel()
        }
    
    }
}
慕容劲
2023-03-14

您可以为重复任务创建新作业,并在要停止时取消该作业。

private var job: Job? = null

fun startInfiniteExecution() {
    job = scope.launch {
        while(true) {
            doYourTask()
            delay(1_000)
        }
    }
}

fun cancelTask() {
    job?.cancel()
}
 类似资料:
  • 我正在编写一个Qt GUI应用程序,它通过串行方式接收数据并将数据发送到Arduino。它写得正确,但当尝试阅读时,它不起作用。 我的问题是: 我有一个Arduino代码可以通过串行方式发送信息,我将其编程为根据接收到的数据打开和关闭针脚13上的LED: 我在MainWindow类中使用以下信号和插槽: 以及前一个插槽调用的Arduino::Read()方法: 当向Arduino写入数据时,它工作

  • 问题内容: 我想在事件发生后的10秒钟内运行一段代码,但是我希望能够取消它,这样,如果在这10秒钟之前发生了某些事情,那么经过10秒钟后该代码将无法运行。 我一直在使用它,但是它不能取消: 我该怎么做? 问题答案: 试试看(Swift 2.x,请参阅下面有关Swift 3的David的回答):

  • 问题内容: 我试图像这样使用PrintWriter: 但是Java抱怨: 无效不能取消引用 如果我做: 可行,有什么原因吗? 问题答案: 是。(和其他方法)的签名返回(不是)。您不能将调用链接到方法。

  • 我正在为一个流创建一个'take untilsignal'运算符--一个扩展方法,当另一个流生成输出时,它会取消一个流。 我最初的努力是尝试在与主要流收集相同的协同范围内启动信号流的收集,并取消协同范围: 编辑:我拼凑了以下这些讨厌的东西,它不太符合定义(结果流只会在第一次从主流发射后取消),我觉得有一个更好的方法: edit2再试一次,使用ChannelFlow:

  • 我正在尝试使用Firebase云消息传递(FCM)在一个适用于网络和移动的多平台应用程序中实现一个消息传递子系统。FCM允许您以两种格式发送消息:通知和数据。 通知由平台显示,例如,在web平台上的一个小弹出窗口中,或添加到移动电话上的通知列表中。 数据消息由应用程序处理。 在应用程序可以接收消息之前,您必须向用户请求发送/接收通知的权限。 现在,当用户阻止通知时,数据消息似乎也被阻止了。是我漏了

  • 我想检查API 23中是否授予短信阅读权限。因此,我实现了如下功能:; 处理权限响应。如下所示:; 默认情况下,SMS权限已授予,因此check SelfPermise()重新返回零,但当我手动拒绝设备设置的权限时,也会检查SelfPermise()返回零值。 我不知道如何检查短信权限是否被拒绝。请给我提供一些解决方案。