我有两个活动 - LaunchActivity 和 GameActivity。必须先打开LaunchActivity,因为它会使用配置参数启动GameActivity。除非发生配置更改,否则这工作正常。
当 GameActivity 处于活动状态时发生配置更改时,操作系统会销毁该 Activity,并在恢复时重新创建它。这会导致崩溃,因为 GameActivity 需要来自 LaunchActivity 的配置数据。
有没有办法让 Android 操作系统始终使用 LaunchActivity 启动我的应用程序,即使在配置更改后也是如此?
必须先打开LaunchActivity,因为它会使用配置参数启动GameActivity。
这是一个相当严重的架构错误,您需要修复它。选项包括:
将它们合并到一个活动中,也许使用片段或可组合项来表示单独的屏幕
将这些配置值保存在已保存的实例状态中
Bundle
,或其现代包装器(例如,由ViewModel
支持的SavedStateHandle
)
将这些配置值保存在任何活动之外的某个地方,例如在单例存储库中(理想情况下由依赖项反转框架管理,例如 Dagger/Hilt)
通过清单中的
android:configChanges
选择退出自动配置更改,并手动处理它们
既然你有 android-ndk 标签,我的猜测是
GameActivity
正在使用一些基于 NDK 的游戏框架。这可能会降低其中一些选项的吸引力。另一方面,任何值得使用的游戏框架都应该有详细记录的选项来处理配置更改 - 如果您选择的框架没有,也许您应该重新考虑该选择。 Android 的这一方面已经存在了 16 年;游戏框架开发人员肯定有时间遵守它。
有没有办法让 Android 操作系统始终使用 LaunchActivity 启动我的应用程序,即使在配置更改后也是如此?
不,除了只进行一项活动(参见上面的第一个项目符号)。