2

Activity当用户的设备旋转时,我对被破坏和重新创建有点困惑。

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

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

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

从我所见,绝对一切都被破坏了,基类构造函数运行并且所有变量Activity都是'null'。

我怀疑“savedInstanceState”(Bundle类)是我收集这些数据的地方,但阅读它似乎只用于当应用程序因缺乏资源而关闭时(以及其他一些极其边缘的情况)

我是否误导或误解了 savedInstanceState 的目的?Activity如果我足够注意轮换时不会错过任何东西,那么放弃最佳实践(让其被摧毁)是否明智?提前感谢您的任何建议。

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

4

2 回答 2

2

您需要重新创建您的活动吗?你想在轮换方面做些什么工作?savedInstanceState 是您存储要传递给重新创建 Activity 的数据的位置,但由于您没有使用 XML 布局,您可以考虑在清单中将 android:configChanges="orientation" 添加到您的 Activity。这将使您可以手动控制旋转更改期间发生的情况。

除了我的原始评论之外,我还将覆盖显示键盘的配置更改:

android:configChanges="orientation|keyboardHidden"

如果您想在轮换更改上做一些工作,您可以覆盖onConfigChange并在那里做任何您需要的事情。

很难说有时您应该始终覆盖配置更改,但是当我不依赖特定于大小或方向的资源文件夹并且我正在做很多工作需要太多时间时,我经常这样做是时候重新创建了。

于 2013-10-17T15:08:06.007 回答
0

在活动配置更改时存储数据还有其他最佳实践。

1. 开发人员文档处理运行时更改
2. Alex Lockwood:使用片段处理配置更改,这将回答您关于配置更改和存储数据的所有问题。

Impt: 用于存储数据的片段文件。您必须设置setRetainInstace(true)以便在活动配置更改时存储数据和检索。

@Override 
   public void onCreate(Bundle savedInstanceState) {  
          super.onCreate(savedInstanceState);        
          // retain this fragment
          setRetainInstance(true);    
    }
于 2015-04-03T04:00:19.640 回答