是onCreate()调用旋转

时间:2012-07-02 01:14:26

标签: android

对于2.1以后的Android版本,onCreate()是否会被轮换?我在onCreate()中放了一个日志打印,但它不打印2.3.3和4.0.3。

以下是代码:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    Runtime runtime = Runtime.getRuntime();
    long free = runtime.freeMemory();
    long total = runtime.totalMemory();
    long occupied = total - free;

    Log.i("MEM", "heap: " + occupied);
}

在2.1上,日志消息由于方向而多次打印;在2.3.3上,它只打印一次。

3 个答案:

答案 0 :(得分:6)

如果您声明了android:configChanges="orientation"标志,则不会销毁和重新创建活动(不会调用onCreate())和回调

onConfigurationChanged()

将被召唤。

答案 1 :(得分:5)

如前所述,如果你想避免在旋转时重新创建活动,从而再次调用onCreate(),你必须在清单中声明相应的configChanges。

在这种情况下,您必须在configChanges中设置旋转标记。

android:configChanges="orientation"

但是,从Android 3.0及更高版本开始,您还必须声明screenSize值。

来自http://developer.android.com/guide/topics/resources/runtime-changes.html

  

警告:从Android 3.2(API级别13)开始,当设备在纵向和横向之间切换时,“屏幕尺寸”也会发生变化。因此,如果要在开发API级别13或更高级别(由minSdkVersion和targetSdkVersion属性声明)时由于方向更改而阻止运行时重新启动,则除了“orientation”值之外,还必须包含“screenSize”值。也就是说,你必须decalare android:configChanges =“orientation | screenSize”。但是,如果您的应用程序的目标是API级别12或更低,那么您的活动始终会自行处理此配置更改(即使在Android 3.2或更高版本的设备上运行,此配置更改也不会重新启动您的活动。)

所以,现在你的configChanges会看起来:

android:configChanges="orientation|screenSize"

答案 2 :(得分:3)

是的,它总是被调用(除了K_Anas上面提到的例外)。它贯穿整个过程。请参阅此link,尤其是配置更改部分。

生命周期的图形。

enter image description here