android - 当 "do not keep activity"开发选项打开时,ViewModel 被清除

标签 android mvvm viewmodel android-lifecycle

这是我的设置 1. Main Activity——包含MainFragment Mainfragment - 有 MainFragViewModel

复制 - 1.开启不保留开发者设置中的 Activity 。 2. 启动应用程序。 3. 按主页。

现在,由于我们的设置,当应用程序进入后台时会发生以下 Activity 。 1. fragment View 模型 - onCleared() [意外,因为系统正在终止 fragment ,而应用程序进程未被终止。] 2. fragment 被破坏[预期] 3. Main Activity 被销毁 - isFinishing = false(这意味着框架知道谁在杀死)[预期] 4. 应用没有被销毁[预期]

现在从后台应用程序卡中再次启动应用程序。接下来发生了。 1. Main Acitivity - onCreate(bundle != null) [预期。它还提供 bundle !都好] 2. fragment 已创建 [预期 - bundle 已交付。即不为空] 3. FragmentViewModel 实例已创建 [UnExpected!!因为 View 模型应该幸存下来。因为我们没有弹出 fragment 。由于开发设置,它被系统杀死]

这种行为破坏了我的设计,为了让我的应用程序在开发者手机上正常工作,开发者手机可能会停止 Activity 。我必须将信息保存在 Bundle 中!!

我错过了什么?您有哪些可能的解决方案?

最佳答案

这是有意为之的——ViewModel 仅在配置更改时保留。 “不保留 Activity ”意味着 Activity 不会经历配置更改 - 它们被完全销毁并且它们保存的实例状态被保留。您会注意到 isFinishing() 不是正确的检查 - 正确的检查是 isChangingConfigurations(),当 Activity 时它确实是 false由于“不要保持 Activity ”而被杀死。

如果您的进程因内存不足而被终止,这与您遇到的行为类型相同,因此您必须确保您的 Fragment 在单独从保存的实例状态恢复时正常工作。

关于android - 当 "do not keep activity"开发选项打开时,ViewModel 被清除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61377355/

相关文章:

java - 如何在 Android 中通过改造访问 JSON 响应中的特定值?

SilverLight - MVVM 将 View 模型属性绑定(bind)到数据网格列

java - 具有 Manifest 声明的独特 PendingIntent

android - 是否有适用于 Android 的假数据生成器?

android - Gradle Building Schema 动态地从组合的 flavor 维度

mvvm - 寻找MVVM示例

WPF ViewModel 与否 ViewModel

wpf - 如何在一个主窗口中使用多个 ViewModel

android - 如何通过 Koin 提供具有接口(interface)的 ViewModel

android - 我可以在 Activity 和服务之间共享 ViewModel 吗?