2012-07-30 57 views
0

最奇怪的事情正在發生。在我的onClick(查看...)我有代碼塊,主要是'if/else'塊。序列是(在僞代碼,爲您節省冗長的代碼):我的代碼行不是在執行延遲 - Android

  1. 我有一個圖像,需要使用imageButton.setImageResource(randomImage)設置;然後
  2. 我有這個圖片,需要打,然後
  3. 我把睡眠(1800)相關的MediaPlayer的位置,否則的MediaPlayer延續到下MediaPlayer的(這工作正常)
  4. 此圖片的數據進行比較圖片。如果不相同,則播放另一個名爲'boo'的MediaPlayer,並且應該在上面的代碼1中顯示的圖像被替換爲'flag'圖像。其他//如果它的正確圖像然後
  5. 切換到另一個圖像,播放它相應的MeidaPlayer,播放「歡呼聲」MediaPlayer並將圖像更改爲「嘀嗒」圖像,然後做一些其他邏輯的東西。

但是發生了什麼事是代碼2正在播放,代碼3正在發生。代碼4.只有'boo'mediaplayer正在發生,我注意到imagebutton閃爍。應該在代碼1中設置的圖像被延遲,並且僅在'boo'媒體播放器之後發生。代碼1中的第一個圖像設置的「標誌」圖像正在發生,但由於代碼1處於延遲狀態,所發生的情況是圖像沒有改變(雖然它只是處於延遲狀態,然後閃爍,很快它看起來不會改變)。所以代碼1是延遲的。 此外,如果它進入else並右擊圖像,則代碼5中的圖像將切換到「另一個」,但相應的MeidaPlayer不播放,「乾杯」MediaPlayer不播放, 'tick'圖像不顯示,而另一個邏輯不會發生。就好像它忽略了代碼。 這裏發生了什麼?這是一個多線程的情況嗎?將代碼的不同部分分組到自己的線程中,並立即啓動它們只會引發異常。任何幫助將不勝感激!

+0

什麼你指定的比在Android上使用sleep()。但我不知道爲什麼sleep()並不真正表現。 – Yenchi 2012-07-30 14:42:31

+1

'我在這裏放了一個睡眠(1800)'好吧,讓我們從這個開始。擺脫它。重構你的代碼,這樣就不需要在GUI線程中調用sleep()。不要在GUI事件處理程序中入睡或等待! – 2012-07-30 14:42:46

回答

0

如果您想延遲您的代碼,請使用Handler.postDelayed(Runnable, long)。這不會阻塞UI線程,並會在您需要時執行。

Whitout你的代碼,它真的不清楚你試圖達到什麼目的,你如何實現它。

+0

謝謝你們。我找到了一個不需要使用sleep()的方法。我只是將一個布爾參數稍微向上移動了一段代碼,它神奇地工作。所以不需要玩這個線程。謝謝大家,關於Handler.postDe .....的好消息將會在下次使用。 – user1487034 2012-08-22 14:58:44

0

只是爲了解釋Adam的想法。

在你的Activity類將這個:

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

,我想通過報警的經理來喚醒你的程序了,更可能給你計時接近這樣稱呼它

handler.postDelayed(_rnbl , 5000);