2017-08-09 85 views
0

所以之前等待,我在Android的工作室工作,試圖把兩種方法之間的停頓。第一個是加載一個gif,第二個出現彈出消息。我嘗試過使用Thread.sleep和TimeUnit,但兩者都以一種等待時間的方式執行,然後再運行其他任何東西。換句話說,我的代碼在下面等待4秒,然後同時運行gameGif()和gameFinish()。這裏是我的一段代碼:JAVA .wait()用於乳寧的方法機器人工作室

 gameGif(); 
     { 
      try 
      { 
       TimeUnit.SECONDS.sleep(4); 
      } 
      catch(InterruptedException ex) 
      {} 
     } 

     gameFinish(); 
+1

您傳遞的值是很小的,因爲如果您希望它在4秒內停止,那麼它的傳遞值爲4000秒在參數 –

+0

中傳遞4000它可能不像您所描述的那樣工作,但您的睡眠使CPU無法工作,在這個線程中運行。當然Android有相當於'java.awt.image.ImageObserver'? – EJP

回答

1

這是爲我工作

gameGif(); 

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     gameFinish(); 
    } 
}, 4000); 
0

你在做什麼是設置的意圖來更新UI。實際的UI更新由Android Looper獨立於您的代碼執行。實際上,通過調用wait(),實際上是阻止渲染線程進行更新。

使用Handler是做它,馬特斯的職位的正確方法。 Handler將使用Looper組織安排,並且仍允許循環運行(即非阻塞)。當超時時間結束時,它會調用Runnable

這種方法需要注意的一件事就是在UI循環中調用處理程序(即從「正常」的Android方法之一調用)。如果你從你自己的Thread調用它,它將不會正確地與Looper交互。