在一个 Activity 中,我声明了一个计时器
Chronometer chronometer = findViewById(R.id.timer);
ChronometerViewModel viewModel = ViewModelProviders.of(this).get(ChronometerViewModel.class);
if (viewModel.getStartTime() == null) {
long startTime = SystemClock.elapsedRealtime();
viewModel.setStartTime(startTime);
chronometer.setBase(startTime);
} else {
chronometer.setBase(viewModel.getStartTime());
}
chronometer.start();
View 模型类
public class ChronometerViewModel extends ViewModel {
@Nullable
private Long mStartTime;
@Nullable
public Long getStartTime() {
return mStartTime;
}
public void setStartTime(final long startTime) {
this.mStartTime = startTime;
}
}
当我旋转屏幕时,chronometer 会自动从之前的状态恢复。但是我没有编写任何代码来在配置更改时将计时器的当前状态存储到 ViewModel 类。状态是如何自动恢复的?
我正在关注这个谷歌的代码实验室 tutorial
编辑:我对 Chronometer 的 setBase 方法感到困惑。我假设我的状态变量 mStartTime 会自动更新为 Chronometer 小部件中显示的当前时间。现在我已经检查了 setBase 方法的文档。由于 mStartTime 在配置更改时持续存在,我们可以使用 Chronometer 启动时的旧值。所以 Chronometer 实际上恢复了。
最佳答案
ViewModel 生命周期 如下所示,Android 出于同样的目的引入它,以便它可以在配置更改后继续存在并且在 Activity 完成 之前不会丢失状态。 p>
顺便说一句,您是否因为这种行为而面临任何问题?
关于android - ViewModel 状态如何自动更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47872504/