在这个问题之后,我在我的应用程序中做了一些简单的更改,但它没有按我的预期工作。
我有一个计时器,当计时器完成时会发送通知。单击此通知将重新启动活动,删除所有计时器信息,这些信息主要存储在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. 但是当 …