当“不保持活动”开发选项打开时,ViewModel 会被清除

Jai*_*dit 5 android mvvm viewmodel android-lifecycle

这是我的设置 1. Main Activity - Contains MainFragment Mainfragment - Has MainFragViewModel

重现 - 1. 在开发者设置中打开不保留活动。2. 启动应用程序。3. 按主页。

现在,由于我们的设置,当应用程序进入后台时会发生以下活动。1. 片段视图模型 - onCleared() [意外,因为系统正在杀死片段,并且应用程序进程没有被杀死。] 2. 片段被破坏 [预期] 3. 主活动被破坏 - isFinishing = false(这意味着框架知道谁正在杀死)[预期] 4.应用程序没有被破坏[预期]

现在从后台应用程序卡再次启动应用程序。接下来发生了。1. 主要活动 - onCreate(bundle != null) [预期。还送了捆绑包!一切顺利] 2. 片段已创建 [预期 - 捆绑包已交付。即不为空] 3. FragmentViewModel 实例已创建 [意外!!因为视图模型应该存活下来。因为我们没有弹出片段。由于dev设置被系统杀掉了]

这种行为破坏了我的设计,并且为了使我的应用程序在开发人员手机上正常工作,他们可能会不保持活动。我必须将信息保存在捆绑包中!

我缺少什么?您可能的解决方案是什么?

Kar*_*lon -1

我的第一个建议是改进你的问题。你的问题的意图相当模糊,我要建议的内容也让它变得模糊。

我的印象是你希望你viewModel能活下来Activity's destruction/construction process。为此,您有两种选择:

使用 ViewModelProvider

使用视图模型工厂

我建议测试您的设备,并确保不存在强制调试模式清除 viewModel 的内存限制。只要应用程序存在或明确声明要清除,ViewModel 就不应该被清除。