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();
}
我在 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();
}