应用程序中未调用 Lifecycle.Event.ON_DESTROY
Posted
技术标签:
【中文标题】应用程序中未调用 Lifecycle.Event.ON_DESTROY【英文标题】:Lifecycle.Event.ON_DESTROY is not called in Application 【发布时间】:2021-02-09 08:44:06 【问题描述】:我想在用户退出应用程序时调用某个方法(请参阅1、2 以获得帮助)。
class BaseApplication : Application(), LifecycleObserver
override fun onCreate()
super.onCreate()
// Register observer.
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun init()
println("*** called onCreate()")
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun LibOnStart()
println("*** called onStart()")
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun LibOnStop()
println("*** called onStop()")
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun LibOnResume()
println("*** called onResume()")
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun LibOnPause()
println("*** called onPause()")
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun cleanup()
println("*** called onDestroy()")
除了ON_DESTROY
之外,这些事件都会被触发。
I/System.out: *** called onPause() of Activity
I/System.out: *** called onStop() of Activity
可能Application
没有从内存中清理。如果我从最近的列表中滑动应用程序或强制停止,它不会触发 destroy
事件。也许这些事件在Activity
中有效。如何在Application
中捕获destroy
事件?
【问题讨论】:
【参考方案1】:Documentation 声称
您可以将此 LifecycleOwner 视为您所有 活动,除了 Lifecycle.Event.ON_CREATE 将被调度 一次,Lifecycle.Event.ON_DESTROY 将永远不会被调度。
所以没有办法在应用程序中处理onDestroy
。
或者,您可以尝试使用Service
类的onTaskRemoved
回调来捕捉应用从最近删除的时刻。
【讨论】:
以上是关于应用程序中未调用 Lifecycle.Event.ON_DESTROY的主要内容,如果未能解决你的问题,请参考以下文章
Android 学习之那些年我们遇到的BUG9:Lifecycle.Event.ON_RESUME 提前触发了