Android复习-Acitivity的生命周期(一、正常情况下的各种回调)

    xiaoxiao2021-03-25  46

    Activity七大生命周期总结(源自Android艺术开发与探索):

    onCreate:表示Activity正在被创建,这个时候需要做一些初始化工作,例如加载布局资源,初始化数据。

    onStart :表示Activity正在被启动,即将被启动,这时的Activity已经可见了,但是在后台,无法与我们进行交互,并且对于我们而言,是不可见的。

    onResume: 表示Activity已经可见,并且可以和用户交互了。注意与onStart的区别,onStart的时候虽然也叫可见,但是对于用户而言,它是在后台的,无法进行交互。

    onPause:暂停状态,表示Activity即将或者可能停止,我们在这里应该做一些轻量级的资源回收,但是不能太耗时,因为只有当前Activity的onPause执行完,下一个启动的Activity的onResume才会执行。

    onStop : 停止状态,表示Activity已经停止,处于完全不可见状态,我们可以做一些重量级的回收工作,让一些行为停止。

    onDestroy:即将销毁,表示Activity已经要销毁了,可以在这进行终极回收工作了。

    常见的一些疑问:

    onDestroy执行了 ,Activity得实例就被销毁了吗?  

    答:不,onDestroy执行了,只是代表Activity的生命周期走完了,已经没用了,至于Activity这个实例何时被回收,还得虚拟机什么时候回收它。

    正常情况下Activity的生命周期执行流程:

    假设有两个Activity,一个为A,一个为B。

    我们先来分析只有一个Activity时会出现的各种生命周期走向

    我们先启动A,那么生命周期执行为:

    A...onCreate A...onStart A...onResume

    如果弹出一个dialog,不影响任何生命周期,也就是不执行任何生命周期。

    假如按了Home键:

    A...onPause A...onStop

    然后再再进入应用:

    A...onRestart A...onStart A...onResume

    假如按了返回键(Back):

    A...onPause A...onStop A...onDestroy

    这是在正常情况下一个Activity面对各种操作时会发生的生命周期流程。

    现在分析两个Activity,假如说从A启动了B。

    A...onCreate A...onStart A...onResume A...onPause B...onCreate B...onStart B...onResume A...onStop 可以看出A先执行它的正常生命流程,然后在A点击按钮启动了B,先调用A的onPause方法,然后才会去调用B的onCreate,onStart,onResume的,等着B完全位于前台时,A的onStop再被回调。

    这是如果在B按返回键的话:

    B...onPause A...onRestart A...onStart A...onResume B...onStop B...onDestroy

    可以看出,也是先执行B的onPause,然后再执行A的onRestart,onStart,onResume,然后才去执行B的onStop,接着执行onDestroy。

    其实我们可以发现,当两个Activity涉及到一种,一个Activity要显示,另一个要隐藏的这种情况,就会先调用要隐藏的Activity的onPause,然后再去执行要显示Activity的生命周期,等着要显示的Activity生命周期执行完毕的话,它再接着执行自身的其余生命周期。所以onPause有着一种要被停止前先被回调的使命。

    现在假如B是一个Dialog或者透明主题的Activity:

    A...onCreate A...onStart A...onResume A...onPause B...onCreate B...onStart B...onResume 我们可以看出区别,A执行onPause,不会去执行onStop的,这时我们按Home键:

    B...onPause A...onStop B...onStop

    我们再返回程序:

    A...onRestart A...onStart B...onRestart B...onStart B...onResume 我们发现一个问题,无论是停止还是返回来再重新显示,都是先执行A的相关声明周期,这不难理解,因为如果B成为了dialog或者透明主题的话,它是依附在A存在的,所以消失的话必须先让A消失,它才能消失,显示的话,必须得让A先显示,它才能显示的。而且这里我们发现A的onStart被执行了,onResume没有被执行,这也证明了我们前面的总结,onStart也是可见状态,只不过是在后台,我们与我们交互而已。

    图例:

    此时按返回键的话:

    B...onPause A...onResume B...onStop B...onDestroy

    再按:

    A...onPause A...onStop A...onDestroy

    好的,我们分析完了在正常情况下,Activity声明周期回被回调的各种情况。

    画图总结一下:

    转载请注明原文地址: https://ju.6miu.com/read-38738.html

    最新回复(0)