如何指定配置更改后应启动哪个Android Activity?

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

我有两个活动 - LaunchActivity 和 GameActivity。必须先打开LaunchActivity,因为它会使用配置参数启动GameActivity。除非发生配置更改,否则这工作正常。

当 GameActivity 处于活动状态时发生配置更改时,操作系统会销毁该 Activity,并在恢复时重新创建它。这会导致崩溃,因为 GameActivity 需要来自 LaunchActivity 的配置数据。

有没有办法让 Android 操作系统始终使用 LaunchActivity 启动我的应用程序,即使在配置更改后也是如此?

android android-ndk android-lifecycle android-developer-api android-configchanges
1个回答
0
投票

必须先打开LaunchActivity,因为它会使用配置参数启动GameActivity。

这是一个相当严重的架构错误,您需要修复它。选项包括:

  • 将它们合并到一个活动中,也许使用片段或可组合项来表示单独的屏幕

  • 将这些配置值保存在已保存的实例状态中

    Bundle
    ,或其现代包装器(例如,由
    ViewModel
    支持的
    SavedStateHandle

  • 将这些配置值保存在任何活动之外的某个地方,例如在单例存储库中(理想情况下由依赖项反转框架管理,例如 Dagger/Hilt)

  • 通过清单中的

    android:configChanges
    选择退出自动配置更改,并手动处理它们

既然你有 标签,我的猜测是

GameActivity
正在使用一些基于 NDK 的游戏框架。这可能会降低其中一些选项的吸引力。另一方面,任何值得使用的游戏框架都应该有详细记录的选项来处理配置更改 - 如果您选择的框架没有,也许您应该重新考虑该选择。 Android 的这一方面已经存在了 16 年;游戏框架开发人员肯定有时间遵守它。

有没有办法让 Android 操作系统始终使用 LaunchActivity 启动我的应用程序,即使在配置更改后也是如此?

不,除了只进行一项活动(参见上面的第一个项目符号)。

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