Activity是Android四大组件之一,其中Activity的生命周期是面试必问题,一般只要回答:
onCreate --> onStart --> onResume --> onPause --> onStop --> onDestory即可。下面开始详细说一下这些生命周期。
在内存中,存在着一个Activity栈,当Activity被创建的时候,
Activity栈中就会添加一个Activity,反之,如果Activity被销毁,就会将Activity从栈中删除。
onCreate:只有在Activity被创建的时候执行;
onRestart:Activity再次被唤起的时候执行;
onStart :Activity启动的时候执行;
onResume:Activity被唤起到前台,变成可见状态的时候执行;
onPause:Activity被遮挡的时候执行(被另一个Activity、Dialog遮挡)
onStop:Activity从前台切换到后台的时候执行;
onSaveInstanceState:Activity从前台切换到后台时,保存Activity状态;
onDestory:Activity被销毁的时候执行;
当启动一个Activit时,生命周期是:
onCreate --> onStart --> onResume
当按Home键,将Activity从前台切换到后台时的生命周期是:
onPause --> onStop --> onSaveInstanceState
(3)唤起后台中的Activity
A的生命周期:onRestart --> onStart --> onResume
(4)按返回键
A的生命周期:onPause --> onStop --> onDestroy
(5)横竖屏切换(重点)
正常情况下,屏幕旋转的时候Activity生命周期会被执行:
onPause --> onStop --> onSaveInstanceState --> onDestroy --> onStart --> onRestoreInstanceState --> onResume
但是,如果在android:configChanges=""中配置"orientation|screenSize"属性之后,
屏幕旋转时,Activity不会走生命周期,这种情况下只会执行如下方法:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
newConfig可以捕获到屏幕的旋转状态。
configChanges的配置说明如下:
* “mcc“ 移动国家号码,由三位数字组成,每个国家都有自己独立的MCC,可以识别手机用户所属国家。
* “mnc“ 移动网号,在一个国家或者地区中,用于区分手机用户的服务商。
* “locale“ 所在地区发生变化。
* “touchscreen“ 触摸屏已经改变。(这不应该常发生。)
* “keyboard“ 键盘模式发生变化,例如:用户接入外部键盘输入。
* “keyboardHidden“ 用户打开手机硬件键盘
* “navigation“ 导航型发生了变化。(这不应该常发生。)
* “orientation“ 设备旋转,横向显示和竖向显示模式切换。
* “fontScale“ 全局字体大小缩放发生改变
(6)扩展题
当Dialog被弹起时旋转屏幕,怎样让Dialog不消失?
方法一:
在Activity注册表中添加android:configChanges="orientation|screenSize"属性,使Activity在屏幕旋转时不走生命周期;
方法二:
如果没有配置"orientation|screenSize"属性,那么还可以通过onSaveInstanceState和onRestoreInstanceState实现,
使用onSaveInstanceState方法保存Dialog的状态(存入Bundle中),在onRestoreInstanceState中的Bundle中拿到Dialog的状态,
根据Dialog状态再重新显示对话框;
[本章完...]
网友评论