在 Java 中执行方法时暂停执行 x 秒

Pause execution for x seconds while performing method in Java

如何在执行方法时暂停我的应用程序?

考虑下面的例子:

private void myMethod() {
   // some lines of code
   this.player.activateEffect(true);
   // pause for 5 seconds
   this.player.activateEffect(false);
}

我希望 activeEffect 方法 BE 激活 5 秒,使用暂停。

这是 sleep 的代码:

try {
  Thread.sleep(5000L);
} catch(InterruptedException ie) {
   // Exception handling code here, it is a bad practice to leave this scope empty
}

最好的办法是在 myMethod() 中执行操作,然后在 5 秒后调用另一个方法,可能是 Runnable。

private void myMethod() {
   // some lines of code
   this.player.activateEffect(true);

   // run afterDelay in 5 seconds
   postDelayed(afterDelay, 5000);
}

private Runnable afterDelay = new Runnable() {
    @Override
    public void run() {
        player.activateEffect(false);
    }
};

此代码来自我自己使用 Android Java 的经验,但我认为此技术是可移植的。

在状态改变方法中等待的整个想法是有缺陷的。等待会延迟整个线程,阻止完成任何工作。

如果恰好是 UI 控制线程,应用程序将冻结。

你真正想要做的是给 "effect" 一个超时值,并在每个(游戏)中 "tick" 检查超时是否已过期并在过期时将其删除。