执行代码行的顺序

时间:2012-07-18 20:20:03

标签: java android sleep execution routines

我不明白:

在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

2 个答案:

答案 0 :(得分:1)

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

这有意义吗?

答案 1 :(得分: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);
}