当方向发生变化时,我需要阻止Activity
一遍又一遍地通过onCreate()
。
我在AndroidManifest.xml
中添加了以下代码:
android:configChanges="orientation|keyboardHidden|screenSize"
并将onConfigurationChanged()
方法添加到Activity
,但每次方向更改时它仍然会通过onCreate()
方法...
答案 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 ”配置。