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 翻转到下一个...

谢谢

4

2 回答 2

1

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

这有意义吗?

于 2012-07-18T20:26:51.780 回答
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);
}
于 2012-07-18T20:28:30.893 回答