2012-01-05 108 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