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
其实我们可以发现,当两个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
画图总结一下: