打开“不保留活动”开发选项时,将清除ViewModel

时间:2020-04-23 00:31:16

标签: android mvvm viewmodel android-lifecycle

这是我的设置 1.主要活动-包含MainFragment Mainfragment-具有MainFragViewModel

Repro- 1.启用“请勿将活动保留在开发人员设置中”。 2.启动应用程序。 3.按主页。

由于我们的设置,现在当应用程序进入背景时发生了以下活动。 1.片段视图模型-onCleared()[未预期,因为系统正在杀死片段,而应用程序进程也未被杀死。] 2.碎片被破坏[预期] 3.主要活动已销毁-isFinishing = false(这意味着框架知道谁在杀死谁)[预期] 4.应用程序未销毁[预期]

现在从后台应用程序卡再次启动该应用程序。随后发生了。 1.主要活动-onCreate(bundle!= null)[预期。它还提供了捆绑包!都好] 2.片段已创建[预期-包已交付。即不为空] 3.创建了FragmentViewModel实例[意外!!因为视图模型应该可以保留下来。因为我们没有弹出片段。由于开发设置,系统将其杀死]

此行为破坏了我的设计,并且为了使我的应用在可以关闭的开发人员电话上正常运行,请不要保留活动。我必须将信息保存在捆绑中!!

我想念什么?有什么可能的解决方案?

2 个答案:

答案 0 :(得分:0)

我的第一个建议是改善您的问题。您的问题的意图相当模糊,我要提出的建议也使它变得模糊。

给我的印象是,您希望您的 viewModel Activity's destruction/construction process 中生存。为此,您有两个选择:

使用ViewModelProviders

使用ViewModelFactory

我建议您测试设备的设备,并确保没有任何内存约束会迫使调试模式清除viewModel。只要应用程序可以生存或声明要明确清除ViewModel,就不应清除它。

答案 1 :(得分:0)

这是有意的-ViewModels仅在配置更改时保留。 “不保留活动”表示活动没有进行配置更改-活动被完全销毁,并且仅保留其保存的实例状态。您会注意到isFinishing()不是正确的检查-正确的检查是isChangingConfigurations(),当活动由于“不要保留”而被杀死时,这确实是错误的活动”。

这是与您的过程由于内存不足而被终止时所经历的行为类型相同的行为,因此您必须确保从保存的实例状态单独还原时,您的Fragment可以工作。