Activity 的生命周期分为2部分内容:
典型情况下生命周期 | 有用户参与的情况下,Activity所经过的生命周期的改变; |
异常情况下生命周期 | Activity被系统回收或者由于当前设备的Configuration发生改变从而导致Actiivty被销毁重建 |
典型情况下生命周期
onCreate | Activity正在被创建,这是生命周期的第一个方法,可以在这个方法中做初始化工作。比如在setContentView 是加载布局后初始化Activity所需要的数据 |
onRestart | Activity正在重新启动,一般情况下Activity从不可见到可见状态就会调用此方法,这种情形下是用户行为导致的,比如用户按home键切换到桌面或者用户打开了一个新的Activity,这时当前activity就会被暂停,执行onPause和onStop,接着用户又回到了这个Activity,就会调用onRestart |
onStart | Activity正在被启动,即将开始,处于可见状态,但是还没有出现在前台,还无法和用户交互。可以理解为Activity已经显示出来了,但是我们还看不到 |
onResume | Activity已经可见了并且出现在前台开始活动,注意onStart和onResume的对比,都处于可见状态,但是onStart的时候Activity还在后台,onResume的时候activity显示到了前台 |
onPause | Activity正在停止,正常情况霞紧接着会调用onStop,在特殊情况下,如果这时候快速的在回到当前的activity,那么onResume会被调用,这属于极端情况,用户操作很难重现这一场景,此时可以做一些处存储操作、停止动画等操作,但是不能太耗时,因为这会影响到新Activity的显示,onPause必须先执行完,新的Activity的onResume才会执行 |
onStop | Activity即将停止,可以做稍微重量级的回收工作,同样不能太耗时 |
onDestroy | Activity即将被销毁,这也是Activity最后一个生命周期回调,可以做一些回收工作和最终的资源释放 |
Acitivity本质上有四种状态:
运行:如果一个活动被移到了前台(活动栈顶部)。
暂停:如果一个活动被另一个非全屏的活动所覆盖(比如一个Dialog),那么该活动 就失去了焦点
停止:如果一个活动被另一个全屏活动完全覆盖,那么该活动处于停止状态
重启:如果一个活动在处于停止或者暂停的状态下,系统内存缺乏时会将其结束(finish)或者杀死(kill)。这种非正常情况下,系统在杀死或者结束之前会调用onSaveInstance()方法来保存信息,同时,当Activity被移动到前台时,重新启动该Activity并调用onRestoreInstance()方法加载保留的信息,以保持原有的状态。
onCreate:与onDestroy配对,表示Activity正在被创建,这是生命周期的第一个方法。
onDestroy:与onCreate配对,表示Activity即将被销毁,这是Activity生命周期的最后一个回调,我们可以做一些回收工作和最终的资源释放(如Service、BroadReceiver、Map等)。
onRestart
:表示Activity正在重新启动。一般情况下,在当前Activity从不可见重新变为可见的状态时onRestart就会被调用。这种情形一般是由于用户的行为所导致的,比如用户按下Home键切换到桌面或者打开了一个新的Activity(这时当前Activity会暂停,也就是onPause和onStop被执行),接着用户有回到了这个Activity,就会出现这种情况。
onStart:与onStop配对,表示Activity正在被启动,并且即将开始。但是这个时候要注意它与onResume的区别。两者都表示Activity可见,但是onStart时Activity还正在加载其他内容,正在向我们展示,用户还无法看到,即无法交互。
onStop:与onStart配对,表示Activity即将停止,可以做一些稍微重量级的回收工作,同样也不能太耗时(可以比onPause稍微好一点)。
onResume:与onPause配对,表示Activity已经创建完成,并且可以开始活动了,这个时候用户已经可以看到界面了,并且即将与用户交互(完成该周期之后便可以响应用户的交互事件了)。
onPause:与onResume配对,表示Activity正在暂停,正常情况下,onStop接着就会被调用。在特殊情况下,如果这个时候用户快速地再回到当前的Activity,那么onResume会被调用(极端情况)。一般来说,在这个生命周期状态下,可以做一些存储数据、停止动画的工作,但是不能太耗时,如果是由于启动新的Activity而唤醒的该状态,那会影响到新Activity的显示,原因是onPause必须执行完,新的Activity的onResume才会执行。
MainActivity跳转MainActivity2过程
启动MainActivity
MainActivity: onCreate 创建
MainActivity: onStart: 前台可见 不可以跟用户交互
MainActivity:onResume: 前台可见 可以跟用户交互
点击按钮 跳转到MainActivity2
MainActivity: onPause()
MainActivity2: onCreate()
MainActivity2: onStart()
MainActivity2: onResume()
MainActivity: onStop()
MainActivity2 返回到MainActivity
MainActivity2: onPause()
MainActivity: onRestart() activity正在重新启动
MainActivity: onStart()前台可见 不可以跟用户交互
MainActivity: onResume() 前台可见 可以跟用户交互
MainActivity2: onStop()
MainActivity2: onDestroy()