android四大主件Activity存在自己的生命周期,google官网上用下面一张图说明生命周期。
7个生命周期方法:
(1)onCreate(Bundle bundle);创建Activity,
(2)onStart();开启Activity时调用,此时activity界面用户可见。
(3)onResume();在Activity显示时调用,获取焦点,文本框可输入,按钮可点击。
(4)onPause();在某个Activity被覆盖,但是又没有被完全覆盖时调用。失去焦点,文本框不可输入,按钮不可点击,界面仍可见。
类似于游戏的暂停状态。
(5)onStop();在某个Activity被覆盖时调用,activity界面用户不可见。
(6)onRestart();在某个Activity被覆盖后又重新显示时调用
(7)onDestroy();最后销毁时调用
此外还有两种生命周期
可视生命周期:onStart())-->onResume())-->onPause())-->onStop()
前台生命周期: onresume-->onpause 界面用户仍然可见,但是失去焦点
使用场景:
1.应用程序退出自动保存数据 ondestory oncreate
2.应用程序最小化 暂停的操作 onstop onstart 视频播放器
3.游戏的暂停和开始 前台生命周期
tips:
一:从一个activity跳转到另一个activity,第一个activity会将整个生命周期走完,onCreate()-->onStart())-->onResume()-->onPause()-->onStop()-->onDestroy()
然后第二个activity的生命周期是onCreate()-->onStart()-->onResume()。
如果第二个activity的style是Dialog窗口模式,
<activity android:theme="@android:style/Theme.Dialog"/>,那么第一个activity之执行到onPause()。
二:屏幕横竖屏切换时会把当前activity销毁再次创建一个新的activity,数据都不复存在。
禁止横竖屏切换方法:
<activity android:name="com.zhangyan.itheima28.IntentActivity" android:screenOrientation="portrait" android:configChanges="orientation|keyboardHidden|screenSize"> </activity>
当android:configChanges指定的属性发生变化时,不会去重新启动Activity,而是通知程序去调用 onConfigurationChanged()函数 例如:在进行横竖屏的切换时,会重新启动Activity,而定义了这个属性,就不会重新启动Activity了,而是去调用 onConfigurationChanged()函数。
自从Android 3.2(API 13),在设置Activity的android:configChanges="orientation|keyboardHidden"后,还是一样 会重新调用各个生命周期的。因为screen size也开始跟着设备的横竖切换而改变。所以,在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置"orientation", 你还必须设置"ScreenSize"。