如何从 MainActivity 调用方法到 LifeCycleObserver

How to call method from MainActivity into LifeCycleObserver

我按照教程构建了一个计时器应用程序。本教程在 MainActivity 中创建了创建和销毁计时器的方法。现在,我正试图在用户离开应用程序时停止计时器。我正在使用 LifeCycleObserver 在 Lifecycle.Event.ON_STOP 发生并且应用程序进入后台时调用。

我想在用户离开应用程序时在 Main Activity 中调用一个名为 onTimerFinished() 的方法

当我尝试调用我的 LifeCycleObserver 中的方法时,它 returns 一个错误,它是一个未解析的引用。

这是我正在尝试 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 中调用这个函数

不能直接调用MainActivity private fun。您需要它的参考并且必须制作 onTimeFinished 方法 public.

在 MainActivity

fun onTimerFinished(){
timerState = TimerState.Stopped
setNewTimerLength()
progress_countdown.progress = 0
PrefUtil.setSecondsRemaining(timerLengthSeconds,this)
secondsRemaining = timerLengthSeconds
updateButtons()
updateCountdownUI()

}

生命周期观察者

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)