小编Ari*_*tro的帖子

savedStateHandle 不保存状态

在这个问题之后,我在我的应用程序中做了一些简单的更改,但它没有按我的预期工作。

我有一个计时器,当计时器完成时会发送通知。单击此通知将重新启动活动,删除所有计时器信息,这些信息主要存储在viewModel. 出于这个原因,我决定使用保存的状态viewModel。

这是我的viewModel:

class TimerViewModel(private val savedStateHandle: SavedStateHandle) : ViewModel() {

private val _secondsRemaining = savedStateHandle.getLiveData<Long>(SECONDS_REMAINING)
val secondsRemaining : LiveData<Long>
    get() = _secondsRemaining
Run Code Online (Sandbox Code Playgroud)

viewModel这是我在我的中使用的方法Fragment:

private val timerViewModel by viewModels<TimerViewModel>()
Run Code Online (Sandbox Code Playgroud)

当我启动计时器时,我会在时钟LiveData的每个滴答声中保存剩余秒数的值。当计时器结束时,应用程序发送通知,计时器再次启动,计算一个新的周期:

timer = object : CountDownTimer(timerLengthSeconds * 1000, 1000){
        override fun onFinish(){
            (....)
        }

        override fun onTick(millisUntilFinished: Long) {
            var secondsRemainingInCountdown = millisUntilFinished / 1000

            (...)

            _secondsRemaining.value = secondsRemainingInCountdown
         
        }
    }.start()
}
Run Code Online (Sandbox Code Playgroud)

因此,当计时器完成时,应用程序会发送通知,但计时器已重新启动,并且剩余的秒数正在更新(我已通过日志检查了这一点)。当用户单击通知时,通知会activity被终止并重新启动,并且期望会看到计时器以及保存在LiveData. 但是当 …

android persistence viewmodel kotlin viewmodel-savedstate

3
推荐指数
1
解决办法
4029
查看次数