2012-07-18 118 views
0

我不明白:代码执行行的顺序

在ShakeListener类中,我在包含类中执行例程。

的例程是:

public void showWord(){ 
     myShakeListener.stop();  

     flipper.showNext(); 

     v.vibrate(countdown5, -1); 

     try { 
      Thread.sleep(5000); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     myShakeListener.start(); 
    } 

奇怪的事情(对我来说,仍然是一个初学者),是线程睡眠之前显示的下一个视图。这是为什么?

我要完成什么:用户摇动手机 - > viewflipper翻转到下一个 - >手机不响应摇晃5秒 - >用户摇动手机 - > viewflipper翻转到下一个... ...

日Thnx

回答

1

问题是viewflipper可能是另一个线程。你遇到了一个竞争条件。更好的选择是产生一个线程5秒,当它启动时设置一个叫做“noshake”的布尔值为true,并在完成时将其设置为false。在允许再次摇动之前检查noshake == false。

这有道理吗?

+0

是的!我明白了..将尽快实施并在此之后正确标记此答案。日Thnx – 2012-07-19 10:20:36

1

这是因为你的代码阻塞了UI线程。你应该这样做:

Handler mHandler = new Handler(); 
public void showWord(){ 
    myShakeListener.stop();  

    flipper.showNext(); 

    v.vibrate(countdown5, -1); 

    mHandler.postAtTime(new Runnable() { 
     @Override 
     public void run() { 
      myShakeListener.start(); 
     } 
    }, 5000); 
}