Android生命周期
Android中Activity的生命周期分两种情况:
1、典型情况下的生命周期,在用户参与的情况下,Activity所经过的生命周期
2、异常情况下的生命周期,指Activity被系统回收或者由于当前设备的Configuration发生改变从而导致的Activity被销毁重建。
典型情况下的生命周期:
1)onCreate:表示Activity正在被创建。
2)onRestart:表示Activity正在重新启动,当当前Activity从不可见重新变成可见状态时onRestart就会被调用。
3)onStart:表示Activity正在被启动,此时Activity已经可见,但是还位于后台没有出现在前台,还无法和用户交互。
4)onResume:表示Activity已经可见,并且出现在前台可以与用户交互。
5)onPause:表示Activity正在停止。
6)onStop:表示Activity即将停止。
7)onDestroy:表示Activity即将被销毁。
注意:
1)onStart、onStop与onResume、onPause的区别
onStart、onStop是从Activity是否可见这个角度来回调的。
onResume、onPause是从Activity是否位于前台这个角度来回调的。
2)从一个Activity(A)启动另一个Activity的周期(B)
A:onPause
B:onCreate
B:onStart
B:onResume
A:onStop
3)在onPause方法中不能做耗时操作,否则启动另一个Activity时会用很长时间。
异常情况下的生命周期:
情况一:资源相关的系统配置信息发生改变时导致Activity被杀死并重新创建。
流程:
系统在发生异常情况下,会调用
onSaveInstanceState方法来保存当前Activity的状态,当Activity被系统重新创建时会把销毁前保存的Bundle对象作为参数传给onCreate方法和
onRestoreInstanceState。
注:
onSaveInstanceState方法的触发时机:
1)
当用户按下HOME键时。
2)
长按HOME键,选择运行其他的程序时。
3)
按下电源按键(关闭屏幕显示)时。
4)
从activity A中启动一个新的activity时。
5)
屏幕方向切换时,例如从竖屏切换到横屏时。
总而言之,onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,这是系统的责任,因为它必须要提供一个机会让你保存你的数据(当然你不保存那就随便你了)。
onRestoreInstanceState方法的触发时机:只有当Activity出现异常被销毁时且需要重新创建时才会调用。
onSaveInstanceState方法和onRestoreInstanceState方法“不一定”是成对的被调用的
情况二:资源内存不足导致低优先级的Activity被杀死
Activity优先级的划分:
1、前台Activity:正在和用户交互的Activity,优先级最高
2、可见但非前台Activity:比如Activity中弹出了一个对话框,导致Activity可见但是位于后台无法和用户直接交互。
3、后台Activity:已经被暂停的Activity,比如执行了onStop方法,优先级最低