只在旋转时保存实例状态的正确方法是什么?

时间:2016-01-28 23:44:13

标签: android android-activity screen-rotation savestate

据我所知,当设备旋转时,Android会销毁并重新创建当前活动,以便加载特定方向的资源。为了保存状态,我可以使用onSaveInstanceState(Bundle outState)和常规onCreate(Bundle savedInstanceState),但每次因任何原因销毁/创建应用程序时,都会保存并恢复状态。

我想要做的是在应用程序因方向更改而被销毁/创建时保存/恢复状态 ;当应用程序因内存或用户杀死而被销毁时,我对保存状态不感兴趣。 ¿我该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以设置onConfigurationChange()方法。为此,您需要在Activity的代码中覆盖它并在Manifest中设置一些参数:

<强> MainActivity.java

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

您必须将这些属性(android:configChanges="orientation|screenSize")添加到您的活动中,设置为您想要处理的数量:

<强>的AndroidManifest.xml

<activity android:name=".MyActivity"
          android:configChanges="orientation|screenSize"
          android:label="@string/app_name">

请注意,使用此设置,您的活动将不会重新启动,如文档中所述,因此,如果您要重新启动它,则需要实施手动重启。

  

现在,当其中一个配置发生变化时,MyActivity不会   重新开始。相反,MyActivity接到一个电话   onConfigurationChanged()。

链接到main documentation

答案 1 :(得分:0)

从一开始就证明我的问题是错误的。

当设备旋转时,Android会调用onSaveInstanceState(Bundle outState)onRestoreInstanceState(Bundle savedInstanceState)作为开发人员保存/恢复状态的方法。当通过后退按钮或finish()销毁活动时,onSaveInstanceState 被调用,并且传递给savedInstanceState的{​​{1}}捆绑包为空。所以试着回答“这是在旋转之后创建的吗?”问题无关紧要。

如果有人有同样的问题并且感谢所有花时间阅读和帮助的话。