Android 如何停止和重新启动倒计时计时器

Android 如何停止和重新启动倒计时计时器,android,timer,countdowntimer,activity-lifecycle,Android,Timer,Countdowntimer,Activity Lifecycle,我知道timer.cancel()用于停止倒计时。我还知道,一旦活动进入后台,它将调用该方法 protected void onPause(); protected void onResume(); 当它即将出现在前台时,它调用该方法 protected void onPause(); protected void onResume(); 当活动进入后台时,我在存储倒计时计时器的值方面遇到了一些困难,当活动再次出现时,我会立即继续计时。看看我都试了些什么 @Override publi

我知道timer.cancel()用于停止倒计时。我还知道,一旦活动进入后台,它将调用该方法

protected void onPause();
protected void onResume();
当它即将出现在前台时,它调用该方法

protected void onPause();
protected void onResume();
当活动进入后台时,我在存储倒计时计时器的值方面遇到了一些困难,当活动再次出现时,我会立即继续计时。看看我都试了些什么

 @Override
public void onPause() {
    super.onPause();  

   if (mCountDownTimer != null){

       mCountDownTimer.cancel();
       mCountDownTimer = null;

       SharedPreferences sharedPrefs = context.getSharedPreferences(TIME_PREF, MODE_PRIVATE);
       SharedPreferences.Editor editor = sharedPrefs.edit();
       editor.putString("time", mTextField.getText().toString()).commit();
   }}
那么这个,

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


    SharedPreferences sharedPrefs = context.getSharedPreferences(TIME_PREF, MODE_PRIVATE);
    String prefString = sharedPrefs.getString("time", null);

    if (prefString != null) {

        mTextField.setText(prefString);
        countdown(prefString, sec);

        SharedPreferences sharedPrefToDel = context.getSharedPreferences(TIME_PREF, MODE_PRIVATE);
        sharedPrefToDel.edit().clear().commit();

    }

}
这是我的倒计时方法:

    public void countdown(final String theTime, final long longVal) {

    final int red = getResources().getColor(R.color.red);
    mTextField = (Button) findViewById(R.id.countdown);

    mCountDownTimer = new CountDownTimer(longVal, 1000) {
        public void onTick(long millisUntilFinished) {
            mTextField.setText(theTime);

            if ((millisUntilFinished / 1000) < 60) {
                if (millisUntilFinished / 1000 < 10) {
                    mTextField.setTextColor(red);
                    mTextField.setText("00:0" + millisUntilFinished / 1000);

                } else
                    mTextField.setText("00:" + millisUntilFinished / 1000);

            }
            if ((millisUntilFinished / 1000) >= 60 && (millisUntilFinished / 1000) < 120) {

                if (((millisUntilFinished / 1000) - 60) < 10) {
                    mTextField.setText("01:0" + ((millisUntilFinished / 1000) - 60));

                } else
                    mTextField.setText("01:" + ((millisUntilFinished / 1000) - 60));

            }

        }

        public void onFinish() {
            mTextField.setText("00:00");

        }
    }.start();

}
public void倒计时(最终字符串时间,最终长值){
final int red=getResources().getColor(R.color.red);
mTextField=(按钮)findviewbyd(R.id.countdown);
mCountDownTimer=新的倒计时(longVal,1000){
公共void onTick(长毫秒未完成){
mTextField.setText(时间);
如果((毫微秒/1000)<60){
如果(毫秒/千分之十){
mTextField.setTextColor(红色);
mTextField.setText(“00:0”+millisuntiltfinished/1000);
}否则
mTextField.setText(“00:+millisuntillfinished/1000);
}
如果((毫微光整度/1000)>=60&(毫微光整度/1000)<120){
如果(((毫微秒/1000)-60)<10){
mTextField.setText(“01:0”+((毫秒直至完成/1000)-60));
}否则
mTextField.setText(“01:”+((毫秒/1000)-60));
}
}
公共无效onFinish(){
mTextField.setText(“00:00”);
}
}.start();
}

问题是,每当应用程序从后台返回时,计时器就会开始显示多个倒计时。我到底需要做什么?

你可以改用天文钟不幸的是,它需要minSDKversion 24才能执行倒计时(true),但我需要将目标设置为低至14。还有其他建议吗@Krishnamein天文钟案例你们需要将时间值保存在一个列表或变量中,天文钟每秒钟给你们一个事件,所以在那个里增加或减少你们的时间值,并显示出来