执行线程的顺序

在视觉上,我希望我的应用程序按以下顺序显示四个Toast:

  1. createToast(“延迟的RandomCue方法的开始”);
  2. createToast(“延迟开始”);
  3. createToast(“延迟结束”);
  4. createToast(“延迟的RandomCue方法结束”);

但是,生成的顺序是:

  1. createToast(“延迟的RandomCue方法的开始”);
  2. createToast(“延迟的RandomCue方法结束”);
  3. createToast(“延迟结束”);
  4. createToast(“延迟开始”);

我的总体目标是拥有一个显示图像并且每3秒钟更换一次的程序。 玩家可以按一个按钮,图像会改变1.5秒。 因此,有两种方法,一种是使用countdowntimer来改变图像,另一种是使用与imagebutton相对应的onClick方法来改变图像。

我遇到的问题是链接中提供的代码(在onclick方法中调用的方法)应该更改图像,将bool值设置为false,等待1.5秒,然后将相同的bool值更改回真正。

虽然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"); } 

这并没有回答你关于祝酒顺序的问题,但你确定,当你说的时候

我遇到的问题是链接中提供的代码(在onclick方法中调用的方法)应该更改图像,将bool值设置为false,等待1.5秒,然后将相同的bool值更改回真正。

虽然bool值为true,但是应该跳过更改图片的方法,但事实并非如此,我不知道为什么,但我认为这与我在下面创建的要点中的代码有关。

是这样的吗?

看起来更像是,如果布尔值设置为false,则需要跳过更改图片的另一种方法,只要它是真的,就需要定期更改图片。

试试这个,也许你的图像在用户触发onClick后不会很快改变。