Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 保存计时器时间并在onResume上继续_Java_Android_Timer - Fatal编程技术网

Java 保存计时器时间并在onResume上继续

Java 保存计时器时间并在onResume上继续,java,android,timer,Java,Android,Timer,我是初学者 我的益智游戏中有一个计时器。但是有一个bug。当用户关闭屏幕时,计时器不会停止。若用户再次打开屏幕,他可以在屏幕上看到游戏,这从用户体验的角度来看是不好的 这是我的定时器代码 private void initializeProgressBar() { //initialize progressbar progress = ApplicationConstants.GAME_TIME; mProgress = (ProgressBarDeterminin

我是初学者

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

这是我的定时器代码

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();

} 

我不知道如何在恢复时修复这个问题,因为现在当用户关闭屏幕时计时器停止,但当用户打开屏幕时计时器不会恢复

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


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

查看CountDownTimer。你现在使用的计时器不应该真的像那样使用。不幸的是,没有暂停,因此请单击“保存变量”以了解计时器当前的位置,然后单击“暂停”取消计时器。然后在onresume中创建一个新时间,并将时间设置为用于跟踪上一个计时器的变量


Hmmm…但如何暂停计时器?我在谷歌上寻找信息,但对初学者来说没有什么有用的:(不幸的是,没有办法暂停计时器,只能取消它。当计时器暂停时,你需要创建当前时间的变量,并在OnResume中重新创建计时器,就像@tomer shemesh说的,将剩余时间保存在变量中,然后用剩余时间启动新计时器谢谢!我希望我知道如何将计时器转换为倒计时:)