我不明白:
在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
答案 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);
}