【问题标题】:CountDownTimer running even when user switches app即使用户切换应用程序,CountDownTimer 也会运行
【发布时间】:2016-01-11 20:15:58
【问题描述】:

我正在构建一个 Android 游戏,我需要显示倒计时。为了让用户不作弊,如果用户更改应用程序,我无法停止此倒计时,因为他们将有更多时间思考答案。

我需要做的是让 CountDownTimer 继续工作,即使我的应用当前不在前面(已调用 onPause)。

我想知道我拥有的代码(似乎可以工作)是否可以解决问题,或者在某些情况下它是否会失败。

现在倒计时继续,当它变为 0 时,结果屏幕显示在当前应用程序上(当然,这不是我想要的)。 我认为对于第二个问题,解决方案是存储一个变量或其他东西,并在启动结果屏幕之前检查它。

所以,总而言之,我想要的是即使用户更改当前应用程序也能继续倒计时,但是当倒计时到 0 时,在用户返回游戏之前不要显示结果屏幕。

我的代码如下:

new CountDownTimer(10000, 1000) {

   public void onTick(long millisUntilFinished) {
       tvTime.setText(String.valueOf(millisUntilFinished / 1000));
   }

   public void onFinish() {
       startActivity(new Intent(GameActivity.this, ResultActivity.class));
   }
}.start();

谢谢。

【问题讨论】:

    标签: java android android-service countdowntimer


    【解决方案1】:

    只是为了让您了解应该做什么。可能应该使用SystemClock.elapsedTime()

    public class CountdownTimer {
        private final long startTime = currentTime();
        private final long totalTime;
        private boolean isFinished = false;
    
        public CountdownTimer(long millis) {
            totalTime = millis;
        }
    
        public long timeLeft() {
            return totalTime - (currentTime() - startTime);
        }
    
        public boolean isFinished() {
            return isFinished || (isFinished = timeLeft() < 0);
        }
    
        protected long currentTime() {
            return System.currentTimeMillis();
        }
    }
    

    如果用户关闭了您的应用,那么您不应该在他们身上重新打开它。让他们自己打开应用程序并发现他们的时间到了,或者显示通知。

    【讨论】:

      【解决方案2】:

      将其存储在变量中并在不暂停的情况下显示它似乎是最简单的解决方案。我要做的是在 onPause 方法中将一些全局变量设置为 true,类似于

      if(!thatGlobalVariable)
      {
           displayVariable()
      }
      

      你知道我的意思,这是你的想法传达给你。

      抱歉,这并没有太大帮助,您可能正在寻找其他更奢侈的解决方案。在此期间,我会这样做,直到您得到更合适的答案。

      另外,如果超时消息在最小化时弹出,我认为这很酷。所以这个人可能会在谷歌上查找一些东西,然后突然“时间到了,你失败了”。人们喜欢折磨他们玩得更多的游戏。

      【讨论】:

        【解决方案3】:

        除了保存在 SavedInstance 中的所有其他游戏状态外,您还可以保存当前时间。当用户恢复您的应用程序时,您可以将新时间与保存的值进行比较,以确定时间是否到了。然后就可以显示消息了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多