据我所知,当设备旋转时,Android会销毁并重新创建当前活动,以便加载特定方向的资源。为了保存状态,我可以使用onSaveInstanceState(Bundle outState)
和常规onCreate(Bundle savedInstanceState)
,但每次因任何原因销毁/创建应用程序时,都会保存并恢复状态。
我想要做的是在应用程序因方向更改而被销毁/创建时保存/恢复状态 ;当应用程序因内存或用户杀死而被销毁时,我对保存状态不感兴趣。 ¿我该怎么做?
答案 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()。
答案 1 :(得分:0)
从一开始就证明我的问题是错误的。
当设备旋转时,Android会调用onSaveInstanceState(Bundle outState)
和onRestoreInstanceState(Bundle savedInstanceState)
作为开发人员保存/恢复状态的方法。当通过后退按钮或finish()
销毁活动时,onSaveInstanceState
不被调用,并且传递给savedInstanceState
的{{1}}捆绑包为空。所以试着回答“这是在旋转之后创建的吗?”问题无关紧要。
如果有人有同样的问题并且感谢所有花时间阅读和帮助的话。