执行线程的顺序

时间:2014-08-14 14:44:01

标签: java android

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

  1. createToast("延迟的RandomCue方法的开始");
  2. createToast("延迟开始");
  3. createToast("延迟结束");
  4. createToast("延迟的RandomCue方法结束");
  5. 但是,生成的顺序是:

    1. createToast("延迟的RandomCue方法的开始");
    2. createToast("延迟的RandomCue方法结束");
    3. createToast("延迟结束");
    4. createToast("延迟开始");
    5. 我的总体目标是拥有一个显示图像并且每3秒钟更换一次的程序。玩家可以按一个按钮,图像会改变1.5秒。因此,有两种方法,一种是使用countdowntimer来改变图像,另一种是使用与imagebutton相对应的onClick方法来改变图像。

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

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

      所以我遇到的问题是当点击按钮时,图像会按预期更改,但由于第一种方法无法识别播放器的响应因此无法更改图像,因此有时会再次快速更改。 / p>

       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();
      

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

  

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

     

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

是这样的吗?

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

尝试一下,也许您的图片在用户触发onClick后很快就会发生变化。