首页 > 解决方案 > 应用程序被杀死时未调用 onDispose 回调

问题描述

onDispose我关闭我的应用程序或其进程被终止时,不会调用回调。这是预期的行为吗?此事件是否有不同的回调?我可以通过以某种方式将MainActivitysonStop回调传递给可组合的方法来制作自己的吗?

我需要这种回调的原因是因为我想在用户离开屏幕或进程死亡时将用户输入的一些数据保存到数据库中。我了解到这SavedStateHandle是为这个用例制作的,但仅适用于少量数据 - 我想保存复杂的、不可打包的数据,并且我不希望SavedStateHandle看起来有代码开销。

我目前的解决方法是每次更改都保存到数据库中,这并不难,因为我的代码使用 coroutine 是反应性的StateFlow。我担心这会对性能产生影响,但也许我错了,这是最好的解决方案。

标签: androidandroid-jetpack-compose

解决方案


被强制停止/从最近被删除?如果是,那么这是预期的行为,composerviewLifecycle在处于状态时被ON_DESTROY释放。

从来源:

 override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
        if (event == Lifecycle.Event.ON_DESTROY) {
            dispose()
        } else if (event == Lifecycle.Event.ON_CREATE) {
            if (!disposed) {
                setContent(lastContent)
            }
        }
    }

如果ON_DESTROY没有被派遣,作曲家将不会处置。ProcessLifecycle也不会有帮助。

onDestroy在这种情况下是不可靠的,您应该等待onStoponPauseonDispose应该用于处理与视图相关的任何操作/资源。


推荐阅读