我已经按照教程构建了计时器应用程序。本教程在MainActivity中创建了创建和销毁计时器的方法。现在,我正在尝试在用户离开应用程序时停止计时器。当发生Lifecycle.Event.ON_STOP且应用程序进入后台时,我正在使用LifeCycleObserver进行调用。
我想在用户离开应用程序时在Main Activity中调用一个名为onTimerFinished()的方法
当我尝试在LifeCycleObserver中调用该方法时,它返回一个错误,它是一个未解决的引用。
这是我正在尝试onTimerFinished的LifecycleObserver
class ApplicationObserver() : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onBackground() {
Log.d("myTag", "App closed")
MainActivity.onTimerFinished()
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onForeground() {
}
}
这是位于我MainActivity中的onTimerFinished函数
private fun onTimerFinished(){
timerState = TimerState.Stopped
setNewTimerLength()
progress_countdown.progress = 0
PrefUtil.setSecondsRemaining(timerLengthSeconds,this)
secondsRemaining = timerLengthSeconds
updateButtons()
updateCountdownUI()
}
当我将变量移到MainActivity的伴随对象中时,它似乎并没有改变实际的计时器。而是更改随播对象的变量。
如何在LifecycleObserver中调用此函数
答案 0 :(得分:1)
您不能直接调用MainActivity的私人乐趣。您需要它的引用,并且必须将onTimeFinished方法公开。
在MainActivity中
fun onTimerFinished(){
timerState = TimerState.Stopped
setNewTimerLength()
progress_countdown.progress = 0
PrefUtil.setSecondsRemaining(timerLengthSeconds,this)
secondsRemaining = timerLengthSeconds
updateButtons()
updateCountdownUI()
}
lifecycleobserver
class ApplicationObserver(mainActivity: MainActivity) : LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onBackground() {
Log.d("myTag", "App closed")
mainActivity.onTimerFinished()
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onForeground() {
}
}
在
之类的 MainActivity 中创建ApplicationObserver对象时,可以将此参数作为参数传递val applicationObserver = ApplicationObserver(this)