activity生命周期
一.典型情况下的生命周期:
1.当activity首次启动时,回调如下:onCreate –> onStart –> onResume
2.当打开新的Activity或切换到桌面时,回调如下:onPause –> onStop
3.当再次回到Activity时,回调如下:onRestart –> onStart –> onResume
4.当按下back键时,回调如下:onPause –> onStop –>onDestory
5.当启动一个新Activity时,旧Activity的onPause方法会先执行,然后才会启动新的Activity
二.异常状态下的生命周期:
当资源相关的系统配置发生改变以及系统内存不足时,可能会导致Activity被杀死。Activity被杀死之前会回调onSaveInstanceState方法,这个方法会在onStop方法之前调用,和onPause方法没有时序关系。
Activity被重建时,系统会调用onRestoreInstanceState方法,这个方法是在onStart方法之后。
当系统配置发生改变后,如Activity由竖屏变成横屏时,Activity会被重新创建,如果不想重建,需要在AndroidManifest.xml中设置android:configChanges="orientation|screenSize“
这时Activity不会被重建,也不会调用onSaveInstanceState方法和onRestoreInstanceState方法,取而代之的是系统会调用onConfigurationChanged方法。
系统配置所含的项目
项目 |
含义 |
mcc |
IMSI移动台的国家代码(MCC)发生变化——一个SIM被探测到并且更新MCC |
mnc |
IMSI移动台的网络代码(MNC)发生变化——一个SIM被探测到并且更新MNC |
locale |
设备的本地位置发生改变——一般指切换了系统语言 |
touchscreen |
触摸屏发生变化(通常不会发生。) |
keyboard |
键盘类型发生变化——例如:用户插入了外接键盘。 |
keyboardHidden |
键盘的可访问性发生变化——例如:用户发现了硬件键盘。 |
navigation |
导航类型(轨迹球或dpad)发生变化。(通常不会发生。) |
screenLayout |
屏幕布局发生变化——这个会导致显示不同的Activity。 |
fontScale |
字体缩放因子发生变化——用户选择了新的字体大小。 |
uiMode |
当UI模式发生改变的时候——当用户放置设备到桌子或/汽车或夜间模式改变的时候可以引起UI模式变化。阅读UiModeManager。在API级别8时引入。 |
orientation |
屏幕方向发生变化——用户旋转了屏幕。注意:如果应用程序的目标API级别是13或更高(通过属性minSdkVersion和属性targetSdkVersion声明),你也需要声明配置项screenSize,因为这将在设备选择肖像和屏幕方向时发生改变。 |
screenSize |
当前可用屏幕大小发生变化。这代表一个当前可用大小的变化,和当前的比率相关,因此当用户选择不同的画面和图像,会发生变化。然而,如果你的程序目标API级别是12或更低,你的Activity总是会自己处理这个配置变化(这个变化不会引起Activity的重启,甚至在Android 3.2或更新的设备上)。在API级别13里加入的。 |
smallestScreenSize |
物理屏幕大小的变化。不管方向的变化,仅仅在实际物理屏幕打包变化的时候,如:外接显示器。这个配置项的变化引起在smallestWidth configuration里的变化。然而,如果你的程序目标API级别低于13时,activity将不会重启,否则会重启activity(在API13新添加 |
layoutDirection |
布局方向变化。例如书写方式从左向右(LTR)转换为从右向左(RTL) |