从视觉上看,我希望我的应用程序按以下顺序显示四个 Toast:
- createToast("延迟 RandomCue 方法开始");
- createToast("延迟开始");
- createToast("延迟结束");
- createToast("延迟的 RandomCue 方法结束");
但是,结果顺序是:
- createToast("延迟 RandomCue 方法开始");
- createToast("延迟的 RandomCue 方法结束");
- createToast("延迟结束");
- createToast("延迟开始");
我的总体目标是拥有一个显示图像并每 3 秒更改一次的程序。玩家可以按下按钮,图像会改变 1.5 秒。因此有两种方法,一种是使用倒计时来换图,另一种是使用imagebutton对应的onClick方法来换图。
我遇到的问题是链接中提供的代码(从 onclick 方法中调用的方法)应该更改图像,将 bool 值设置为 false,等待 1.5 秒,然后更改相同的 bool值恢复为 true。
虽然 bool 值为 true,但应该跳过更改图片的方法,但事实并非如此,我不知道为什么,但我认为这与我在下面创建的要点中的代码有关。
所以我遇到的问题是,当单击按钮时,图像会按预期更改,但有时由于第一种方法无法识别玩家响应,因此图像有时会再次更改得太快,因此不应更改图像。
public void delayedRandomCue(final long a){
didPlayerRespond = true;
createToast("start of delayed RandomCue Method");
randomCue();
Thread delay = new Thread() {
public void run() {
try {
createToast("start of delay");
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
createToast("end of delay");
didPlayerRespond = false;
}
}
};delay.start();
createToast("end of delayed RandomCue Method");
}
https://gist.github.com/cjayem13/d32446ceb8c6d9626c68#file-easyfragment-Java https://gist.github.com/cjayem13/d32446ceb8c6d9626c68
https://gist.github.com/cjayem13/d0a0b124dfe17666be25#file-easyfragment-Java https://gist.github.com/cjayem13/d0a0b124dfe17666be25
onclick(){
delayedRandomCue(final long a)
}
randomCue();
Thread cueThread = new Thread(){
public void run() {
try {
while (fComm.fragmentGetTimerBool()) {
if(!didPlayerRespond) {
if (decTime > 1000) {
Thread.sleep(decTime);
} else {
Thread.sleep(1000);
}
decTime -= 50;
randomCue();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
saveScore();
}
// turn into end of all pics triggers bonus sTimerOn = false; fComm.fragmentScoreResponse(100);
//createToast("Bonus for completing all possible answers");
}
}; cueThread.start();
最佳答案
public void delayedRandomCue(final long a){
didPlayerRespond = true;
这首先发生
createToast("start of delayed RandomCue Method");
randomCue();
Thread delay = new Thread() {
public void run() {
这在后台异步发生。
try {
createToast("start of delay");
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
这发生在异步运行并完成后的后台
createToast("end of delay");
didPlayerRespond = false;
}
}
};delay.start();
这是第二个,因为它与方法的其余部分同步执行。
createToast("end of delayed RandomCue Method");
}
关于java - 线程的执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25310948/