在 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" 检查超时是否已过期并在过期时将其删除。
如何在执行方法时暂停我的应用程序?
考虑下面的例子:
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" 检查超时是否已过期并在过期时将其删除。