是onCreate()调用旋转

dac*_*ngy 2 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);
}
Run Code Online (Sandbox Code Playgroud)

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

K_A*_*nas 6

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

onConfigurationChanged()
Run Code Online (Sandbox Code Playgroud)

将被召唤.


Iñi*_*igo 5

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

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

android:configChanges="orientation"
Run Code Online (Sandbox Code Playgroud)

但是,从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"
Run Code Online (Sandbox Code Playgroud)