Android 如何停止和重新启动倒计时计时器
我知道timer.cancel()用于停止倒计时。我还知道,一旦活动进入后台,它将调用该方法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
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天文钟案例你们需要将时间值保存在一个列表或变量中,天文钟每秒钟给你们一个事件,所以在那个里增加或减少你们的时间值,并显示出来