繁体   English   中英

节省计时器时间并在onResume上恢复

[英]Save timer time and resume on onResume

我是初学者。

我的益智游戏中有一个计时器。 但是有一个错误。 当用户关闭屏幕时,计时器不会停止。 如果用户再次打开屏幕,他可以在屏幕上看到游戏,这从UX角度来看是不好的。

这是我的计时器代码

private void initializeProgressBar() {
    //initialize progressbar 

    progress = ApplicationConstants.GAME_TIME;

    mProgress = (ProgressBarDetermininate) findViewById(R.id.progressDeterminate);
    mProgress.setMax(progress);
    mProgress.setProgress(progress );
    timer = new Timer();
    progressBarUpdateTask = new ProgressBarUpdateTask();
    timer.schedule(progressBarUpdateTask, 20, 20);

}

class ProgressBarUpdateTask extends TimerTask {
      @Override
      public void run() {
       runOnUiThread(new Runnable(){
        @Override
        public void run() {
            progress-=1;
            if(progress==0)
            {
                TimeOver();
            }
            mProgress.setProgress(progress);
        }

        });
      }

    @Override
protected void onResume() {
    super.onResume();

}

@Override
protected void onPause() {
    super.onPause();
    this.timer.cancel();

} 

我无法弄清楚如何修复此onResume,因为现在计时器在用户关闭屏幕时停止,但在用户打开屏幕时不恢复。

然后,您应该在onPause()方法中暂停计时器,而不要取消它,而在onResume()方法中,可以在关闭屏幕之前用剩下的秒数重新启动计时器。 有关活动生命周期的更多信息,请查看“ 活动生命周期”

但是我认为您真正需要的是CountDownTimer类而不是Timer类。

看看CountDownTimer。 您现在不应该真正使用计时器。 不幸的是没有暂停,所以onTick保存一个变量来知道计时器当前在什么位置,然后在暂停时取消计时器。 然后在onresume中创建一个新时间,并将时间设置为用于跟踪最后一个计时器的变量。

http://developer.android.com/reference/android/os/CountDownTimer.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM