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

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声明周期回被回调的各种情况。


画图总结一下:










猜你喜欢

转载自blog.csdn.net/sinat_31311947/article/details/61913423