在中断时保存countTimer()(Android)

在中断时保存countTimer()(Android),android,android-studio,timer,oncreate,Android,Android Studio,Timer,Oncreate,我正在创建一个游戏,我将一个计时器设置为onCreate方法,以向用户显示时间,并在时间达到0时执行操作。我的方法工作正常,但因为我写了一次,时间继续倒计时,如果我旋转屏幕等,它重置计时器秒。我知道为什么会发生这种情况,但我找不到一种方法在应用程序暂停时停止它,并在应用程序继续时使它从离开的位置继续。这是我的密码 new CountDownTimer(15000, 1000) { public void onTick(long millisUntilFinished)

我正在创建一个游戏,我将一个计时器设置为onCreate方法,以向用户显示时间,并在时间达到0时执行操作。我的方法工作正常,但因为我写了一次,时间继续倒计时,如果我旋转屏幕等,它重置计时器秒。我知道为什么会发生这种情况,但我找不到一种方法在应用程序暂停时停止它,并在应用程序继续时使它从离开的位置继续。这是我的密码

 new CountDownTimer(15000, 1000) {

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

            public void onFinish() {
                question.setText("done!");
                Intent i2 = new Intent(getApplicationContext(), CategoryActivity.class);
                startActivity(i2);
            }
        }.start();
我应该将milisuntiltfinished保存到savedInstanceState并根据savedInstanceState启动计时器,还是有更简单的解决方案

编辑:所以我更新了我的代码,以反映我的要求。这样,当手机旋转时,我可以保存定时器的最后状态,但当我打开菜单时,定时器仍然不会停止(暂停应用程序)


我希望下面的代码可以帮助您

private long startTime = 0L;
private boolean threadStop = false;
private Handler myHandler = new Handler();
private Runnable updateTimerMethod = new Runnable() {
    public void run() {
        if (isAdded()) {
            timeInMillies = SystemClock.uptimeMillis() - startTime;
            //finalTime = timeSwap + timeInMillies;
            time.setText(miliSecondToMinSec(timeInMillies));

            if (!threadStop)
                myHandler.postDelayed(this, 1000);
        }
    }
};

@Override
public void onStart() {
    super.onStart();
    if (threadStop) {
        threadStop = false;
        startTime = SystemClock.uptimeMillis() - timeInMillies;
        myHandler.postDelayed(updateTimerMethod, 0);
    }
}

@Override
public void onStop() {
    threadStop = true;
    super.onStop();
}
然后只需取消
onPause
中的
mCountTimer
,并从“onResme”开始

 protected void onResume(){
   super.onReusme();

   mCountTimer = new CountDownTimer(seconds*1000,1000){
       //......record the seconds
   }
}

protected void onPause(){
    if(mCountTimer != null)
       mCountTimer.cancel();
}

如果在旋转屏幕时您的活动将破坏,则需要
onSaveInstanceState
。否则您不需要此方法

我应该使用onCreate中的处理程序,对吗?而isAdded是未使用的。它检查什么?它在片段中,这就是为什么我使用isAdded检查片段是否添加到活动中。是的,你在oncreate中启动countr。我支持你的答案,但接受另一个,因为它使用countTimer。当我将countTimer从onCreate设置为onResume时,它也可以工作。我接受这个答案。
CounDwonTimer mCountTimer;
int seconds = 0;
 protected void onResume(){
   super.onReusme();

   mCountTimer = new CountDownTimer(seconds*1000,1000){
       //......record the seconds
   }
}

protected void onPause(){
    if(mCountTimer != null)
       mCountTimer.cancel();
}