activity 恢复时无法检索 countDownTimer 剩余的 timeMillis 值

unable to retrieve countDownTimer left timeMillis value when activity resumed

我在 activity 启动时启动了 countDownTimer,并且全局声明了 milliRemaining 变量

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

    countDownTimer = new CountDownTimer(120000 , 1000){

        @Override
        public void onTick(long millisUntilFinished) {

            millisRemaining = millisUntilFinished;

            seconds = (long) (millisUntilFinished / 1000);
            minutes = seconds / 60;
            seconds = seconds % 60;
            mCountdownTimerTextView.setText(String.format("%02d", minutes)
                    + ":" + String.format("%02d", seconds));

        }

        @Override
        public void onFinish() {
            mCountdownTimerTextView.setText("Done");
        }
    }.start();

}

在 savedInstance 方法中存储 millisRemaining 的值

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putLong("millisLeft" , millisRemaining);

}

并且在 restoreInstancestate 方法中我调用 onTick 方法传递 millisRemaining

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    millisRemaining = savedInstanceState.getLong("millisleft");

    System.out.println(millisRemaining/1000);

    countDownTimer.onTick(millisRemaining);
}

它正确显示时间,直到 activity 没有暂停。我是android的新手,请指正。另外,我是否以正确的方式实现了这一点。

更新

这是Activity

的代码
public class MainActivity extends AppCompatActivity {

private long seconds , minutes , millisRemaining;
CountDownTimer countDownTimer = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

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

    countDownTimer = new CountDownTimer(120000 , 1000){

        @Override
        public void onTick(long millisUntilFinished) {

            millisRemaining = millisUntilFinished;

            seconds = (long) (millisUntilFinished / 1000);
            minutes = seconds / 60;
            seconds = seconds % 60;
            mCountdownTimerTextView.setText(String.format("%02d", minutes)
                    + ":" + String.format("%02d", seconds));

        }

        @Override
        public void onFinish() {
            mCountdownTimerTextView.setText("Done");
        }
    }.start();

    @Override
protected void onSaveInstanceState(Bundle outState) {

    outState.putLong("millisLeft" , millisRemaining);
    super.onSaveInstanceState(outState);

}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    millisRemaining = savedInstanceState.getLong("millisleft");

    System.out.println(millisRemaining/1000);

    countDownTimer.onTick(millisRemaining);
}

}

只需将 onStart()onCreate() 的代码放入即可。为了更好地理解,请参阅 App Lifecycle

编辑:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    countDownTimer = new CountDownTimer(120000, 1000) {

        @Override
        public void onTick(long millisUntilFinished) {

            millisRemaining = millisUntilFinished;

            seconds = (long) (millisUntilFinished / 1000);
            minutes = seconds / 60;
            seconds = seconds % 60;
            mCountdownTimerTextView.setText(String.format("%02d", minutes)
                    + ":" + String.format("%02d", seconds));

        }

        @Override
        public void onFinish() {
            mCountdownTimerTextView.setText("Done");
        }
    }.start();
}

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

}