2012-01-05 107 views
0

我正在爲Android設計一款迷你遊戲。我使用此代碼創建時,遊戲暫停,即暫停3分鐘定時器:睡眠()在Android中

class update extends Thread{ 
    @Override 
    public final void interrupt(){ 
     super.interrupt(); 
     } 
     @Override 
     public void run(){ 
      try{ 
      while(true){ 
       sleep(50); 
       iTime++; 
       if(iTime>=3600) 
        bEnd = true; //finish 

       postInvalidate(); 
       } 
      }catch(InterruptedException e){   
       } 
    } 
} 
update thread = null; 

3600 = 20*3*60 

計時器結束在模擬器中約5分鐘內,和Galaxy Tab的約1.5分鐘後。

爲什麼不總是需要3分鐘?我如何確保在3分鐘內完成?

+1

優化可能嗎?爲什麼不只是找出當前時間,將計時器設置爲在3分鐘內過期,並在計時器關閉時完成計時? – KevinDTimm 2012-01-05 16:13:10

+0

所以,我不能暫停遊戲 – Sunary 2012-01-05 16:17:12

回答

0

我不確定你在做什麼postInvalidate(),但也許你可以做一些AlarmManager和服務。你可以創建一個任務,從現在開始運行3分鐘,它將執行服務,在你的情況下,將使遊戲無效。

我見過很多試圖用睡眠方法處理超時的問題,我相信Android並不保證它會以這種方式工作。

如果您需要幫助創建服務或使用AlarmManager運行某些內容,請發回。幾天前我回答了一個問題。

5

如何使用Android CountDownTimer類?

// 30 second countdown 
new CountDownTimer(30000, 1000) { 

    public void onTick(long millisUntilFinished) { 
     mTextField.setText("seconds remaining: " + millisUntilFinished/1000); 
    } 

    public void onFinish() { 
     mTextField.setText("done!"); 
    } 
    }.start(); 
+0

但是,我不能暫停遊戲,:( – Sunary 2012-01-06 15:08:53

+2

爲什麼不在'onPause'和'onResume'上設置'isPaused'布爾標誌並在定時器中檢查? – Ricky 2012-01-06 15:27:14