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

4

2 に答える 2

1

問題は、viewflipper がおそらく別のスレッドであることです。競合状態に陥っています。より良いオプションは、「noshake」などと呼ばれるブール値を開始時に true に設定し、終了時に false に設定するスレッドを 5 秒間生成することです。別のシェイクを許可する前に、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 に答える