美文网首页
Activity的生命周期(一)

Activity的生命周期(一)

作者: 林栩link | 来源:发表于2017-07-09 18:01 被阅读0次

    正常情况下,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生命周期。谢谢!

    相关文章

      网友评论

          本文标题:Activity的生命周期(一)

          本文链接:https://www.haomeiwen.com/subject/ddzncxtx.html