我如何根据应用程序的生命周期停止 Android 中的循环

How would I stop a loop in Android, based on the app's life cycle

在该应用程序中,我目前正在尝试根据该应用程序是在后台还是在前台发生某些事情。我正在使用 LifecycleObserver

来完成这个
@Volatile public var pause: Boolean = true

@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onAppBackgrounded() {
    //App in background
    pause = true
    while(pause) {
        ///code running
    }
}

@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onAppForegrounded() {
    pause = false
}

我尝试使用 volatile 布尔值结束 onAppBackgrounded() 内的循环,但这似乎不起作用,因为当 onAppBackgrounded() 中的循环仍然存在时 onAppForegrounded() 不会发生 运行.如果有人有任何建议,我将不胜感激。

生命周期函数都在主线程上调用,因此 onAppBackgrounded 不允许在主线程上调用任何其他函数,直到它 returns。如果不需要与主线程一起工作,您可以 运行 在新线程中循环:

@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onAppBackgrounded() {
    pause = true
    thread {
        while(pause) {
            ///code running
        }
    }
}

但是,如果您的应用处于后台运行状态,则它随时都可能被终止。您可能希望 运行 在前台服务中执行您的操作。另外请记住,如果您的生命周期对象上有快速 pause/resume 周期,理论上您可以启动多个并行线程。