我如何根据应用程序的生命周期停止 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 周期,理论上您可以启动多个并行线程。
在该应用程序中,我目前正在尝试根据该应用程序是在后台还是在前台发生某些事情。我正在使用 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 周期,理论上您可以启动多个并行线程。