应用程序被杀死时不调用 onDispose 回调
onDispose callback not called when app is killed
当我关闭我的应用程序或其进程被终止时,onDispose
回调不会被调用。这是有意的行为吗?此事件是否有不同的回调?我可以通过某种方式将 MainActivity
s onStop
回调向下传递给可组合项来制作我自己的回调吗?
我需要这种回调的原因是因为我想在用户离开屏幕或进程死亡时将用户输入的一些数据保存到数据库中。我了解到 SavedStateHandle
是为这个用例制作的,但仅适用于少量数据——我想保存复杂的、不可分包的数据,我不希望 SavedStateHandle
似乎的代码开销有。
我目前的解决方法是在每次更改时都保存到数据库中,这并不难,因为我的代码是使用协程 StateFlow
进行响应的。我担心这会影响性能,但也许我错了,这是最好的解决方案。
最近被杀stopped/swipped?如果是,那么这是预期的行为,当 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
没有调度,作曲家将不会处理。 ProcessLifecycle
也无济于事。
onDestroy
在这种情况下是不可靠的,您应该等待 onStop
或 onPause
,onDispose
应该用于处理任何 operations/resources与视图相关。
当我关闭我的应用程序或其进程被终止时,onDispose
回调不会被调用。这是有意的行为吗?此事件是否有不同的回调?我可以通过某种方式将 MainActivity
s onStop
回调向下传递给可组合项来制作我自己的回调吗?
我需要这种回调的原因是因为我想在用户离开屏幕或进程死亡时将用户输入的一些数据保存到数据库中。我了解到 SavedStateHandle
是为这个用例制作的,但仅适用于少量数据——我想保存复杂的、不可分包的数据,我不希望 SavedStateHandle
似乎的代码开销有。
我目前的解决方法是在每次更改时都保存到数据库中,这并不难,因为我的代码是使用协程 StateFlow
进行响应的。我担心这会影响性能,但也许我错了,这是最好的解决方案。
最近被杀stopped/swipped?如果是,那么这是预期的行为,当 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
没有调度,作曲家将不会处理。 ProcessLifecycle
也无济于事。
onDestroy
在这种情况下是不可靠的,您应该等待 onStop
或 onPause
,onDispose
应该用于处理任何 operations/resources与视图相关。