有许多人对Activity的生命周期理解的不够透彻,希望下面的文字能你们带来一定的帮助。
首先看看android developers 网上的activity的生命周期图:
1. Activity启动的时候:onCreate ---> onStart ---> onResume 这个过程大家都知道,我就不多讲了。
2.接下来我主要讲讲: 何时onPause, 何时onStop,何时onDestory; 以及恢复的时候,何时onRestart,何时onResume。
为了方便大家理解,根据以下示例来进行讲解,如下图
Activity04为当前的Activity,SecondActivity为第二个Activity。
通过Activity的生命周期图我们可看出Activity在Running状态跳转到OnPause状态的原因是:Another activity comes in front of the activity.也就是说:另一个activity启动并运行了;
比如说通过startActivity启动了SecondActivity,那么SecondActivity就在ui视图的最顶层了,而Activity04不再是最顶层的activity了,此时就会onPause了,此时我们依然还能看到Activity04,只是Activity04已经站在他人之后了。
而当Activity04完全被SecondActivity挡住,完全看不见的时候,此时Activity04就会onStop了。从Activity的生命周期图可以看出onPause到onStop的原因是:the activity is no longer visiable. 也就是说此时Activity04完全不可见了,从这里我们可以猜测当按下home键的时候,当前activity就会处于onStop的状态。
从actvitiy的生命周期图中,我们可以看出activity是可以停留在onPause和onStop在这两个状态上的,因为可以相应的恢复。
3. 那么何时停留在onPause,何时停留在onStop呢?
下图的Activity04就是处于onPause状态:
因为这里的SecondActvity是dialog样式:
<activity android:name=".SecondActivity" android:theme="@android:style/Theme.Dialog">
也就验证了当Activity04不再在最顶端,但仍然可见的时候,Activity04就处于onPause状态,此时如果退出(back键)second activity,那么Activity04就会onResume。
下图的Activity04就是处于onStop状态(注意,这里的ThirdActivity是在Activity04中通过ThirdActivity 按钮启动的):
因为此时Activity04已经完完全全被ThridActvity挡住了,完全不可见了,所以Activity04处于onStop状态,如果此时退出ThridActivity(back键),那么Activity04就会onRestart().
何时onDestory呢?
当在Activity04中按back键,退出时,最终就会走到onDestory,或者在代码中调用finish()的时候也会走到onDestroy这一步。
对于activity生命周期图的左侧部分:
当Activity04处于onPause和onStop状态时,当更高优先级的apps需要内存,而此时系统内存不够了,那么android系统就会将Activity04所在的进程给杀了以释放资源。
当然被杀了之后,想重生,那必须得从头来过: onCreate ---> onStart() ---> onResume().