【发布时间】:2020-10-29 04:09:11
【问题描述】:
我有一个屏幕,可以加载一堆请求并在同一个屏幕和一个外部 WebView 上从用户那里收集一些数据。因此,我有一个包含这些复杂请求对象(+ 用户输入数据)的 ViewModel。我需要通过SavedStateHandle 设计的系统启动的进程死亡来保存这些数据。但我不想将这些数据保存在数据库中,因为它只与当前的用户体验相关。
我已将我的 ViewModel 与 Hilt 集成并收到了SaveStateHandle。因为我有一些复杂的对象可以在代码中的多个位置访问/修改,所以我无法“随时随地”保存它们。我让它们实现了Parcelable,只是想立即保存它们。不幸的是,ViewModel 没有像 onSaveInstanceState() 这样的生命周期方法。
现在,我尝试使用onCleared(),这听起来像是一个可以写入句柄的地方。但事实证明,我在那里执行的所有.set() 操作都会丢失(我正在使用开发人员选项“不保留活动”进行测试。当我在其他地方使用.set() 时,它确实有效)。因为 ViewModel 不绑定到单个片段/活动的生命周期,而是绑定到 NavGraph,我无法从他们的onSaveInstanceState() 调用。
我如何/在哪里可以在SaveStateHandle 中正确保存我的状态?
【问题讨论】:
标签: android viewmodel android-savedstate viewmodel-savedstate