屏幕旋转/活动被破坏后,在Android中保持数据视图/布局

时间:2013-10-16 16:45:27

标签: java android android-activity screen-rotation

我对有关被销毁的Activity感到有点困惑,并在用户的设备旋转时重新创建。

我一直在阅读,我理解这样做的理由(它基本上“强迫”开发人员确保他们在轮换/语言/其他更改时没有“错过”任何内容)

我很高兴尊重最佳实践,如果它被视为这样,但它引出了一个问题:

我如何“记住”游戏/应用的状态,以便在旋转屏幕时,我可以从中重新生成用户正在查看的内容?

从我所看到的,绝对一切都被破坏,基类构造函数运行,Activity中的所有变量都是'null'。

我怀疑'savedInstanceState'(Bundle类)是我收集这些数据的地方,但只是在应用程序因缺乏资源而关闭时才会使用它?(以及其他一些非常边缘的案例)

我是否误解或误解了savedInstanceState的目的?放弃最佳实践(让Activity被摧毁)是否明智?如果我有足够的意识在旋转时不会遗漏任何东西?提前感谢任何建议。

我应该注意这个问题适用于游戏编程(我没有使用布局XML)

2 个答案:

答案 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);    
    }