0

最も奇妙なことが起こっています。私の onClick(View ...) には、コードのブロックがあり、ほとんどが 'if/else' ブロックです。シーケンスは次のとおりです(長いコードを節約するために、疑似コードで):

  1. imageButton.setImageResource(randomImage); を使用して設定する必要がある画像があります。それから
  2. 再生が必要なこの画像に関連付けられた MediaPlayer があります。
  3. ここに sleep(1800) を配置します。それ以外の場合、MediaPlayer は次の MediaPlayer に実行されます (これは正常に動作します)。
  4. この画像は別の画像と比較しています。同じでない場合は、「boo」という名前の別の MediaPlayer が再生され、上記のコード 1. で表示されるはずの画像が「flag」画像に置き換えられます。else //正しい画像の場合
  5. 「別の」画像に切り替え、対応する MeidaPlayer を再生し、「cheers」MediaPlayer を再生し、画像を「tick」画像に変更してから、他のロジックを実行します。

しかし、何が起こっているかというと、コード 2. が再生され、コード 3. が発生しています。コード 4. 'boo' mediaplayer だけが発生しており、imagebutton が点滅していることに気付きました。コード 1 で設定されるはずだった画像が遅れており、'boo' メディア プレーヤーの後にのみ発生しています。コード 1. の最初のイメージ設定を置き換える「フラグ」イメージが発生していますが、コード 1. が遅延しているため、何が起こっているかというと、イメージは変化していません (変化しているとはいえ、遅延しているだけで点滅するため、変化しないように見える)。したがって、コード 1. は遅延しています。また、else に入って右の画像をクリックすると、コード 5 の画像が表示されます。「別の」に切り替えますが、対応する MeidaPlayer が再生されず、「乾杯」の MediaPlayer が再生されず、「 tick' 画像はしません' t が表示され、他のロジックは発生しません。コードを無視しているかのようです。ここで何が起こっているのですか?これはマルチスレッドの状況ですか? コードのさまざまな部分を独自のスレッドにグループ化し、それらを一度に開始すると、例外がスローされるだけです。どんな助けでも大歓迎です!

4

2 に答える 2

0

アダムの考えを説明するだけです。

これをActivityクラスに入れます:

final Handler handler = new Handler(); 
Runnable _rnbl = new Runnable() { 
    public void run() {
        // Your code
    }   
};

そして、このように呼び出します

handler.postDelayed(_rnbl , 5000);
于 2012-07-30T16:27:30.237 に答える
0

コードを遅らせたい場合は、 を使用しますHandler.postDelayed(Runnable, long)。これは UI スレッドをブロックせず、必要なときに実行されます。

コードがなければ、何を達成しようとしているのか、どのように達成しようとしているのかは本当に不明です。

于 2012-07-30T14:55:32.333 に答える