android - 应用程序被杀死时未调用 onDispose 回调
问题描述
当onDispose
我关闭我的应用程序或其进程被终止时,不会调用回调。这是预期的行为吗?此事件是否有不同的回调?我可以通过以某种方式将MainActivity
sonStop
回调传递给可组合的方法来制作自己的吗?
我需要这种回调的原因是因为我想在用户离开屏幕或进程死亡时将用户输入的一些数据保存到数据库中。我了解到这SavedStateHandle
是为这个用例制作的,但仅适用于少量数据 - 我想保存复杂的、不可打包的数据,并且我不希望SavedStateHandle
看起来有代码开销。
我目前的解决方法是每次更改都保存到数据库中,这并不难,因为我的代码使用 coroutine 是反应性的StateFlow
。我担心这会对性能产生影响,但也许我错了,这是最好的解决方案。
解决方案
被强制停止/从最近被删除?如果是,那么这是预期的行为,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
在这种情况下是不可靠的,您应该等待onStop
或onPause
,onDispose
应该用于处理与视图相关的任何操作/资源。
推荐阅读
- antlr - 解析以特定关键字开头和结尾的代码块
- javascript - 是否可以完全用 javascript 构建一个 html 网页?
- c# - 无法在 RavenDB 上查询附件
- performance - 甲骨文商务云首页加载的性能提升
- php - Laravel 8 - 从数据库中计算行数
- python - 通过 Firefox (Python) 保存和重复使用 Selenium 制作的 GMAIL cookie
- reactjs - 删除 url 中的参数以进行 nextjs 重定向
- r - 在 x 轴上制作包含多个变量的深度剖面,包括误差线
- python - Pyspark - 将字符串类型元素数组转换为键值对映射
- kubernetes - Pod 无法访问 kubernets clusterIP 服务 (10.96.0.1)