为什么onCreate方法在方向每次更改时运行

时间:2014-12-22 16:11:13

标签: android android-lifecycle

当方向发生变化时,我需要阻止Activity一遍又一遍地通过onCreate()

我在AndroidManifest.xml中添加了以下代码:

android:configChanges="orientation|keyboardHidden|screenSize"

并将onConfigurationChanged()方法添加到Activity,但每次方向更改时它仍然会通过onCreate()方法...

2 个答案:

答案 0 :(得分:5)

这是正常/正确的行为。

此方向会更改Activity的布局,因此它会再次通过onCreate()(实际上是为了让您的UI适应新的配置 - 纵向和所有UI / UX明智的风景。)

尽量不要使用android:configChanges (来自Android Dev Guide);这只能避免这个问题并且是一种坏习惯。

  

注意:应避免使用(android:configChanges)并仅将其用作最后的手段。有关如何通过配置更改正确处理重新启动的详细信息,请阅读处理运行时更改。

以正确的方式处理Android lifecycles and how to save its states,了解runtime changes(以便稍后恢复)。

答案 1 :(得分:0)

    One of to stop an Activity from going through onCreate() over and over again when orientation changes, is to set Activity's Orientation 
in AndroidManifest.xml to say, "portrait" using below code.



<activity
                android:name="com.example.YourActivity"
                android:screenOrientation="portrait"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
</activity>

但是,这意味着,您只限制Activity UI支持纵向模式,而不是用户可能期望的模式。

如果我们尝试 android:configChanges =“orientation | screenSize”,系统不应重新创建您的活动,不包括 keyboardHidden

假设您正在开发此应用程序的目标是API级别13或更高级别(由minSdkVersion和targetSdkVersion属性声明),那么您还应该声明“ screenSize ”配置。