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