正常情况下,Acitivity会经历如下生命周期:
- (1) onCreate():表示Activity 正在创建,这是生命周期的第一个方法,可以做一些初始化操作,比如调用setContentView加载布局,初始化Acitivity所需的数据等。
- (2) onRestart():表示Activity 正在重新启动。当前Acitivity从不可见重新变为可见状态时会调用onRestart方法。比如按Home键切换到桌面或者打开一个新的Activity,当前Actyvity就会暂停,也就onPause和onStop被执行,再回到这个Activity就会出现这种情况。
- (3) onStart():表示Activity正在被启动,已经可见,但还没有出现在前台,还无法和用户交互。
- (4) onResume():表示Activity已经可见了,并且在前台开始活动。注意:onStart和onResume都表示Activity已经可见,但是onStart的时候Activity还在后台,onResume的时候Activity才显示到前台。
- (5) onPause():表示Activity 正在停止,正常情况下,紧接着onStop就会被调用。此时可以做一些存储数据、停止动画等操作,不能太耗时,否则会影响新的Activity的显示,onPause必须先执行完,新Activity的onResume才会执行。
- onStop:表示Activity***即将停止*,可以做一些稍微重量级的回收工作,同样不能太耗时。
- onDestroy:表示Activity即将被销毁,这是Activity生命周期的最后一个回调,可以做一些回收和最终的资源释放。
有如下一些情况:
(1) 第一次启动,回调如下:onCreat->onStart->onResume。
(2) 当用户打开新的Activity或者切换到桌面的时候,回调如下:onPause->onStop 。如果新的Activity是透明的 ,那么当前Activity 只会调用onPause,不会调用onStop。
(3) 当用户再次回到原Activity时,回调如下:onRestart->onStart->onResume。
(4) 当用户按下back键回退时,回调如下:onPause->onStop->onDestory。
(5) 当Activity被系统回收后再次打开,生命周期方法回调过程和(1)一样,只是生命周期方法一样,不代表所有过程都一样。
问题:假设当前Activity为A,如果这时用户打开一个新的Activity B,那么B的onResume和A的onPause哪个先执行?
在新的Activity启动之前,栈顶的Activity需要先onPause后,新的Activity才能启动。
onPause(A) -> onCreate(B) -> onStart(B) -> onResume(B) -> onStop(A)