有没有办法以编程方式重新启动 Activity 并保留其 ViewModel(就好像它是系统配置更改一样)?

问题描述 投票:0回答:1

我们有一款 Android 设备,除了内置显示屏外,还支持外部 USB 显示屏,因此用户可以连接 USB 触摸屏。

发生这种情况时,我们需要将应用程序 UI 移动到新连接的显示器。

根据 docs,有一种方法可以通过

Intent
启动活动并指定目标显示 ID:

startActivity(
    Intent(),
    ActivityOptions.makeBasic()
        .setLaunchDisplayId(displayId)
        .toBundle()
)
finish()

它确实有效。但缺点是,与配置更改不同,

ViewModel
丢失了,这会破坏用户流程。

有没有办法(也许制作这样的

Intent
)以便重新启动
Activity
,但保留
ViewModel
,类似地系统如何更改系统配置?

android viewmodel display android-multi-display
1个回答
0
投票

ViewModel 实际上在配置更改后保留了相关数据。你可以使用 savestatehandle 来更好地处理这种情况。

SavedStateHandle 与 ViewModel 关联。

SavedStateHandle 主要被设计为一种内部机制 管理 ViewModel 实例中的状态。它充当容器 用于跨配置更改保存和恢复数据。

SavedStateHandle 在 Android 中通过以下方式保存配置更改 利用 ViewModel 的生命周期和底层架构 Android 框架。当配置发生更改时,例如 屏幕旋转时,系统会销毁并重新创建关联的 活动或片段。然而,ViewModel,包括它的 SavedStateHandle 仍然不受此过程的影响。

此外,这里也讨论了同样的情况。

问题链接

© www.soinside.com 2019 - 2024. All rights reserved.