60秒からカウントダウンするCountdownTimerがあります。この CountdownTimer は textView を残りのミリ秒に設定することで機能しますが、デバイスを回転させるたびに CountdownTimer がリセットされます。
アクティビティがローテーションで再起動されるため、これが発生することはわかっています。そのため、アクティビティが再起動された後、残り時間をバンドルに保存してから復元しようとしました。
long transferValue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_playtimemode);
Log.d("Debug", "onCreate: " + transferValue);
long setTime = 60000;
long difference = setTime - transferValue;
new CountDownTimer(difference, 1000) {
public void onTick(long millisUntilFinished) {
millisUntilFinishedToSave = millisUntilFinished;
tvCountdown.setText("" + millisUntilFinished / 1000);
}
public void onFinish() {
tvCountdown.setText("done!");
}
}.start();
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putLong("millisKey", millisUntilFinishedToSave);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
transferValue = savedInstanceState.getLong("millisKey");
Log.d("Debug", "onRestoreInstanceState(): " + transferValue);
}
ただし、これは機能しません。このコードの先頭で transferValue を初期化しています (したがって 0 を返します) が、savedInstanceState から CountdownTimer にデータを保存するにはどうすればよいですか?
07-06 20:21:30.038: D/Debug(28995): onCreate: 0
07-06 20:21:30.043: D/Debug(28995): onRestoreInstanceState(): 55994