微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

应用程序被杀死时不调用 onDispose 回调

如何解决应用程序被杀死时不调用 onDispose 回调

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

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

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

解决方法

被杀死,因为从最近的记录中强制停止/滑动?如果是,那么这是预期的行为,当 viewLifecycle 处于 ON_DESTROY 状态时,composer 会被释放。

来源:

 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 没有被分发,composer 将不会处理。 ProcessLifecycle 也无济于事。

onDestroy 在这种情况下是不可靠的,您应该等待 onStoponPauseonDispose 应该用于处置与视图。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。