我对有关被销毁的Activity
感到有点困惑,并在用户的设备旋转时重新创建。
我一直在阅读,我理解这样做的理由(它基本上“强迫”开发人员确保他们在轮换/语言/其他更改时没有“错过”任何内容)
我很高兴尊重最佳实践,如果它被视为这样,但它引出了一个问题:
我如何“记住”游戏/应用的状态,以便在旋转屏幕时,我可以从中重新生成用户正在查看的内容?
从我所看到的,绝对一切都被破坏,基类构造函数运行,Activity
中的所有变量都是'null'。
我怀疑'savedInstanceState'(Bundle
类)是我收集这些数据的地方,但只是在应用程序因缺乏资源而关闭时才会使用它?(以及其他一些非常边缘的案例)
我是否误解或误解了savedInstanceState的目的?放弃最佳实践(让Activity
被摧毁)是否明智?如果我有足够的意识在旋转时不会遗漏任何东西?提前感谢任何建议。
我应该注意这个问题适用于游戏编程(我没有使用布局XML)
答案 0 :(得分:2)
您是否需要重新创建活动?轮换时你想做什么工作? savedInstanceState是存储要传递给Activity的数据的地方,但由于你没有使用XML布局,你可以考虑在清单中为你的活动添加android:configChanges =“orientation”。这将使您可以手动控制旋转更改期间发生的情况。
除了原来的评论之外,我还会覆盖键盘显示的配置更改:
android:configChanges="orientation|keyboardHidden"
如果您想要进行轮换更改,则可以覆盖onConfigChange
并执行您需要的任何操作。
很难说有时候应该总是覆盖配置更改,但是当我不依赖于大小或方向特定的资源文件夹时,我经常这样做,而且我做了大量的工作花费太多时间重新创作。
答案 1 :(得分:0)
在激活配置更改时,还有其他最佳实践来存储数据。
1. Developer Doc Handling Runtime Changes
2. Alex Lockwood : Handling Configuration Changes with Fragments,这将回答您关于配置更改和存储的所有问题数据
<强> IMPT:强>
用于存储数据的片段文件。您必须设置setRetainInstace(true)
才能存储数据并在活动配置更改时进行检索。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// retain this fragment
setRetainInstance(true);
}