2

对于 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 上,它只打印一次。

4

3 回答 3

6

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

onConfigurationChanged()

将被调用。

于 2012-07-02T01:28:25.977 回答
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”值。也就是说,您必须声明 android:configChanges="orientation|screenSize"。但是,如果您的应用程序以 API 级别 12 或更低级别为目标,那么您的 Activity 始终会自行处理此配置更改(此配置更改不会重新启动您的 Activity,即使在 Android 3.2 或更高版本的设备上运行时也是如此)。

因此,现在您的 configChanges 将如下所示:

android:configChanges="orientation|screenSize"
于 2012-07-02T02:14:46.517 回答
3

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

以及生命周期的图形。

在此处输入图像描述

于 2012-07-02T01:30:22.533 回答