Kotlin Handler类:如何在满足条件时从run()内部停止线程?

问题描述 投票:0回答:1

我目前正在学习如何开发android应用程序。对于我的第一个应用程序,我想构建一个带有原始战斗系统的简单答题器。

在我的代码中,我创建了Handler实例Runnable对象。在此“延迟循环”内,敌人每3秒攻击一次玩家实例,造成伤害。在循环内,我还测试了玩家的hp何时小于或等于0;当满足条件时,我要停止可运行对象

我该怎么做?我尝试调用包含stopCombat()的函数Handler.removeCallbacks,但是在声明之前无法调用函数。我尝试将.removeCallbacks(this)放到run()内,但是它也不起作用。

val mainHandler = Handler(Looper.getMainLooper())

    fun playerDied() {
        ongoingFight = false
        combatLog.append("${myPlayer.name} has been defeated!\n")
        myPlayer.currentHitPoints = myPlayer.maxHitPoints / 2
        myPlayer.gold = 0
        gold.text = "${myPlayer.gold} gold"
    }


    val performTask = object : Runnable {
        override fun run() {
            val enemyHit = enemyAttack(myPlayer, myEnemy)
            // Call a function to stop this thread if the condition is met:
            if (myPlayer.takeDamage(enemyHit)) { //myPlayer.takeDamage returns true if hp <= 0
                playerDied()
                stopCombat() // called before declaration
                mainHandler.removeCallbacks(this) // tried, doesn't work
            }
            playerHP.text = "${myPlayer.currentHitPoints} / ${myPlayer.maxHitPoints}"
            combatLog.append("${myEnemy.name} deals $enemyHit damage!\n")
            mainHandler.postDelayed(this, 3000)
        }
    }

    fun stopCombat(){
        mainHandler.removeCallbacks(performTask)
    }
android function loops kotlin android-handler
1个回答
0
投票
如果您仍想使用线程。尝试以下代码。

val executorService = Executors.newSingleThreadExecutor() val runnables = Runnable { } val task = executorService.submit(runnables) task.cancel(true)

© www.soinside.com 2019 - 2024. All rights reserved.