应用程序中未调用 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 提前触发了

Android 学习之那些年我们遇到的BUG9:Lifecycle.Event.ON_RESUME 提前触发了

Android Lifecycle实现原理

Android Lifecycle实现原理

Android Lifecycle实现原理

VTune 中未显示某些函数调用