正常情况下,Activity会经历以下生命周期:
(1).onCreate:表示Activity正在被创建,这是生命周期的第一个方法。在这个方法中,我们可以做一些初始化工作,也是我们开发中最常用的生命周期。
(2).onStart:表示Activity正在被启动,即将开始,这时Activity已经可见了,但是还没有出现在前台,还无法和用户交互。这个时候其实可以理解为Activity已经显示出来了,但是我们还看不到。
(3).onResume:表示Activity已经可见了,并且出现在前台并开始活动。要注意这个和onStart的对比,onStart和onResume都表示Activity已经可见,但是onStart的时候Activity还在后台,onResume的时候Activity才显示到前台,至此整个Activity完全启动,也处于完全可见状态。
(4).onPause:表示Activity正在停止,正常情况下,紧接着onStop就会被调用。在特殊情况下,如果这个时候快速地再回到当前Activity,那么onResume会被调用(需要注意的是:如果onStop没有被调用,那么在返回当前Activity时onRestart同样不会被调用而是直接调用onResume,但是实际上用户操作是很再现这一现象)。此时可以做一些存储数据、停止动画等工作,但是注意不能太耗时,因为这会影响到新Activity的显示,onPause必须先执行完,新Activity的onResume才会执行。
(5).onStop:表示Activity即将停止,可以做一些稍微重量级的回收工作,同样不能太耗时。
(6).onRestart:表示Activity正在重新启动。一般情况下,当当前Activity从不可见重新变为可见状态时,onRestart就会被调用。这种情形一般是用户行为所导致的,比如用户按Home键切换到桌面或者用户打开了一个新的Activity,这时当前的Activity就会暂停,也就是onPause和onStop被执行了,接着用户又回到了这个Activity,就会出现这种情况。
(7).onDestroy:表示Activity即将被销毁,这是Activity生命周期中的最后一个回调,在这里,我们可以做一些回收工作和最终的资源释放。
这里放一张官方文档的图,方便理解:(官方文档地址:https://developer.android.google.cn/reference/android/app/Activity.html)
图1-1 Activity各个生命周期调用示意图这里需要补充几点:
1.Activity第一次启动时,回调过程是:onCretae -> onStart -> onResume。
2.打开新的Activity时或是按下home键退回桌面,当前Activity的回调过程是:onPause -> onStop。
3.当用户再次回到原Activity时,原Activity回调过程是:onRestart -> onStart -> onResume。
4.当用户按back键回退时,当前Activity回调过程是:onPause -> onStop -> onDestroy。
5.从整个生命周期来说,onCreate和onDestroy是配对的,分别标识着Activity的创建和销毁,并且只可能有一次调用。从Activity是否可见来说,onStart和onStop是配对的,随着用户的操作或者设备屏幕的点亮和熄灭,这两个方法可能被调用多次;从Activity是否在前台来说,onResume和onPause是配对的,随着用户的操作或者设备屏幕的点亮和熄灭,这两个方法可能被调用多次
1.有个问题!假如Activity A启动Activity B那么他们的生命周期是如何的?
Activity A的生命周期是首先是:onCretae(A) ->onStart(A) ->onResume(A),当启动Activity B时,比如我们按下了一个启动按钮,这时是:onPause(A)->onCretae(B) ->onStart(B) ->onResume(B)->onStop(A)。
这里要注意,不要在onPause中做重量级的操作,它会影响其它Activity的启动,反应在APP中就会使用户感觉卡顿,操作尽量放在onStop中,但是不要进行重量级耗时操作。
2.还有个问题!假如在Activity中使用了finish(),那么它的生命周期是怎么样的?
当前Activity可能会立即回调onPause->onStop,但是onDestroy不会立即调用,如果在onDestroy进行资源回收的一类操作,就有可能出错。finish只是把当前activity移出activity栈,它所持有的资源何时被释放,由系统自行决定。onDestroy是销毁这个Activity实例,他所持有的资源会一并释放。
本篇说了正常情况下的Activity生命周期,下一篇说一说异常情况下的Activity生命周期。谢谢!
网友评论