转自:点击打开链接
关于Activity的生命周期网上也有很多文章,最经典的莫过于官方的一张图解了。

这张图列出了Activity生命周期最主要的一些方法,启动后依次执行:
onCreate –> onStart –> onResume –> onPause –> onStop –> onDestroy
相信很多人也都已经知道以上方法与执行顺序,但是Activity还有其他方法,如onContentChanged, onPostCreate, onPostResume, onConfigurationChanged, onSaveInstanceState, onRestoreInstanceState,没有什么比自己做个Demo亲自试验研究下更有说服力了,下面我做了一个Demo来彻底研究下这些生命周期的方法,建议大家也亲自试验下:
public class DemoActivity extends Activity {
<span class="n" style="">static</span> <span class="n" style="">final</span> <span class="no" style="">String</span> <span class="no" style="">TAG</span> <span class="o" style="">=</span> <span class="no" style="">DemoActivity</span><span class="p" style="">.</span><span class="nf" style="">class</span><span class="p" style="">.</span><span class="nf" style="">getSimpleName</span><span class="p" style="">();</span>
<span class="vi" style="">@Override</span>
<span class="kp" style="">public</span> <span class="n" style="">void</span> <span class="n" style="">onCreate</span><span class="p" style="">(</span><span class="no" style="">Bundle</span> <span class="n" style="">savedInstanceState</span><span class="p" style="">)</span> <span class="p" style="">{</span>
<span class="k" style="">super</span><span class="p" style="">.</span><span class="nf" style="">onCreate</span><span class="p" style="">(</span><span class="n" style="">savedInstanceState</span><span class="p" style="">);</span>
<span class="no" style="">Log</span><span class="p" style="">.</span><span class="nf" style="">d</span><span class="p" style="">(</span><span class="no" style="">TAG</span><span class="p" style="">,</span> <span class="s2" style="">"onCreate"</span><span class="p" style="">);</span>
<span class="n" style="">setContentView</span><span class="p" style="">(</span><span class="no" style="">R</span><span class="p" style="">.</span><span class="nf" style="">layout</span><span class="p" style="">.</span><span class="nf" style="">activity_demo</span><span class="p" style="">);</span>
<span class="p" style="">}</span>
<span class="vi" style="">@Override</span>
<span class="kp" style="">public</span> <span class="n" style="">void</span> <span class="n" style="">onContentChanged</span><span class="p" style="">()</span> <span class="p" style="">{</span>
<span class="k" style="">super</span><span class="p" style="">.</span><span class="nf" style="">onContentChanged</span><span class="p" style="">();</span>
<span class="no" style="">Log</span><span class="p" style="">.</span><span class="nf" style="">d</span><span class="p" style="">(</span><span class="no" style="">TAG</span><span class="p" style="">,</span> <span class="s2" style="">"onContentChanged"</span><span class="p" style="">);</span>
<span class="p" style="">}</span>
<span class="kp" style="">public</span> <span class="n" style="">void</span> <span class="n" style="">onStart</span><span class="p" style="">()</span> <span class="p" style="">{</span>
<span class="k" style="">super</span><span class="p" style="">.</span><span class="nf" style="">onStart</span><span class="p" style="">();</span>
<span class="no" style="">Log</span><span class="p" style="">.</span><span class="nf" style="">d</span><span class="p" style="">(</span><span class="no" style="">TAG</span><span class="p" style="">,</span> <span class="s2" style="">"onStart"</span><span class="p" style="">);</span>
<span class="p" style="">}</span>
<span class="kp" style="">public</span> <span class="n" style="">void</span> <span class="n" style="">onRestart</span><span class="p" style="">()</span> <span class="p" style="">{</span>
<span class="k" style="">super</span><span class="p" style="">.</span><span class="nf" style="">onRestart</span><span class="p" style="">();</span>
<span class="no" style="">Log</span><span class="p" style="">.</span><span class="nf" style="">d</span><span class="p" style="">(</span><span class="no" style="">TAG</span><span class="p" style="">,</span> <span class="s2" style="">"onRestart"</span><span class="p" style="">);</span>
<span class="p" style="">}</span>
<span class="kp" style="">public</span> <span class="n" style="">void</span> <span class="n" style="">onPostCreate</span><span class="p" style="">(</span><span class="no" style="">Bundle</span> <span class="n" style="">savedInstanceState</span><span class="p" style="">)</span> <span class="p" style="">{</span>
<span class="k" style="">super</span><span class="p" style="">.</span><span class="nf" style="">onPostCreate</span><span class="p" style="">(</span><span class="n" style="">savedInstanceState</span><span class="p" style="">);</span>
<span class="no" style="">Log</span><span class="p" style="">.</span><span class="nf" style="">d</span><span class="p" style="">(</span><span class="no" style="">TAG</span><span class="p" style="">,</span> <span class="s2" style="">"onPostCreate"</span><span class="p" style="">);</span>
<span class="p" style="">}</span>
<span class="vi" style="">@Override</span>
<span class="kp" style="">public</span> <span class="n" style="">void</span> <span class="n" style="">onResume</span><span class="p" style="">()</span> <span class="p" style="">{</span>
<span class="k" style="">super</span><span class="p" style="">.</span><span class="nf" style="">onResume</span><span class="p" style="">();</span>
<span class="no" style="">Log</span><span class="p" style="">.</span><span class="nf" style="">d</span><span class="p" style="">(</span><span class="no" style="">TAG</span><span class="p" style="">,</span> <span class="s2" style="">"onResume"</span><span class="p" style="">);</span>
<span class="p" style="">}</span>
<span class="kp" style="">public</span> <span class="n" style="">void</span> <span class="n" style="">onPostResume</span><span class="p" style="">()</span> <span class="p" style="">{</span>
<span class="k" style="">super</span><span class="p" style="">.</span><span class="nf" style="">onPostResume</span><span class="p" style="">();</span>
<span class="no" style="">Log</span><span class="p" style="">.</span><span class="nf" style="">d</span><span class="p" style="">(</span><span class="no" style="">TAG</span><span class="p" style="">,</span> <span class="s2" style="">"onPostResume"</span><span class="p" style="">);</span>
<span class="p" style="">}</span>
<span class="kp" style="">public</span> <span class="n" style="">void</span> <span class="n" style="">onPause</span><span class="p" style="">()</span> <span class="p" style="">{</span>
<span class="k" style="">super</span><span class="p" style="">.</span><span class="nf" style="">onPause</span><span class="p" style="">();</span>
<span class="no" style="">Log</span><span class="p" style="">.</span><span class="nf" style="">d</span><span class="p" style="">(</span><span class="no" style="">TAG</span><span class="p" style="">,</span> <span class="s2" style="">"onPause"</span><span class="p" style="">);</span>
<span class="p" style="">}</span>
<span class="kp" style="">public</span> <span class="n" style="">void</span> <span class="n" style="">onStop</span><span class="p" style="">()</span> <span class="p" style="">{</span>
<span class="k" style="">super</span><span class="p" style="">.</span><span class="nf" style="">onStop</span><span class="p" style="">();</span>
<span class="no" style="">Log</span><span class="p" style="">.</span><span class="nf" style="">d</span><span class="p" style="">(</span><span class="no" style="">TAG</span><span class="p" style="">,</span> <span class="s2" style="">"onStop"</span><span class="p" style="">);</span>
<span class="p" style="">}</span>
<span class="kp" style="">public</span> <span class="n" style="">void</span> <span class="n" style="">onDestroy</span><span class="p" style="">()</span> <span class="p" style="">{</span>
<span class="k" style="">super</span><span class="p" style="">.</span><span class="nf" style="">onDestroy</span><span class="p" style="">();</span>
<span class="no" style="">Log</span><span class="p" style="">.</span><span class="nf" style="">d</span><span class="p" style="">(</span><span class="no" style="">TAG</span><span class="p" style="">,</span> <span class="s2" style="">"onDestroy"</span><span class="p" style="">);</span>
<span class="p" style="">}</span>
<span class="kp" style="">public</span> <span class="n" style="">void</span> <span class="n" style="">onConfigurationChanged</span><span class="p" style="">(</span><span class="no" style="">Configuration</span> <span class="n" style="">newConfig</span><span class="p" style="">)</span> <span class="p" style="">{</span>
<span class="k" style="">super</span><span class="p" style="">.</span><span class="nf" style="">onConfigurationChanged</span><span class="p" style="">(</span><span class="n" style="">newConfig</span><span class="p" style="">);</span>
<span class="no" style="">Log</span><span class="p" style="">.</span><span class="nf" style="">d</span><span class="p" style="">(</span><span class="no" style="">TAG</span><span class="p" style="">,</span> <span class="s2" style="">"onConfigurationChanged"</span><span class="p" style="">);</span>
<span class="p" style="">}</span>
<span class="kp" style="">public</span> <span class="n" style="">void</span> <span class="n" style="">onSaveInstanceState</span><span class="p" style="">(</span><span class="no" style="">Bundle</span> <span class="n" style="">outState</span><span class="p" style="">)</span> <span class="p" style="">{</span>
<span class="k" style="">super</span><span class="p" style="">.</span><span class="nf" style="">onSaveInstanceState</span><span class="p" style="">(</span><span class="n" style="">outState</span><span class="p" style="">);</span>
<span class="no" style="">Log</span><span class="p" style="">.</span><span class="nf" style="">d</span><span class="p" style="">(</span><span class="no" style="">TAG</span><span class="p" style="">,</span> <span class="s2" style="">"onSaveInstanceState"</span><span class="p" style="">);</span>
<span class="p" style="">}</span>
<span class="kp" style="">public</span> <span class="n" style="">void</span> <span class="n" style="">onRestoreInstanceState</span><span class="p" style="">(</span><span class="no" style="">Bundle</span> <span class="n" style="">outState</span><span class="p" style="">)</span> <span class="p" style="">{</span>
<span class="k" style="">super</span><span class="p" style="">.</span><span class="nf" style="">onRestoreInstanceState</span><span class="p" style="">(</span><span class="n" style="">outState</span><span class="p" style="">);</span>
<span class="no" style="">Log</span><span class="p" style="">.</span><span class="nf" style="">d</span><span class="p" style="">(</span><span class="no" style="">TAG</span><span class="p" style="">,</span> <span class="s2" style="">"onRestoreInstanceState"</span><span class="p" style="">);</span>
<span class="p" style="">}</span>
}
程序启动运行并结束上述生命周期的方法执行顺序是这样的:
onCreate –> onContentChanged –> onStart –> onPostCreate –> onResume –> onPostResume –> onPause –> onStop –> onDestroy
onContentChanged
onContentChanged()是Activity中的一个回调方法 当Activity的布局改动时,即setContentView()或者addContentView()方法执行完毕时就会调用该方法, 例如,Activity中各种View的findViewById()方法都可以放到该方法中。
onPostCreate、onPostResume
onPostCreate方法是指onCreate方法彻底执行完毕的回调,onPostResume类似,这两个方法官方说法是一般不会重写,现在知道的做法也就只有在使用ActionBarDrawerToggle的使用在onPostCreate需要在屏幕旋转时候等同步下状态,Google官方提供的一些实例就是如下做法:
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
<span class="sr" style="">//</span> <span class="no" style="">Sync</span> <span class="n" style="">the</span> <span class="n" style="">toggle</span> <span class="n" style="">state</span> <span class="n" style="">after</span> <span class="n" style="">onRestoreInstanceState</span> <span class="n" style="">has</span> <span class="n" style="">occurred</span><span class="p" style="">.</span>
<span class="nf" style="">mDrawerToggle</span><span class="p" style="">.</span><span class="nf" style="">syncState</span><span class="p" style="">();</span>
}
onPause、 onStop
这里顺便再提一下onPause、 onStop的区别, onPause是在整个窗口被半遮盖或者半透明的时候会执行,而onStop则是在整个窗口被完全遮盖才会触发, 触发onStop的方法之前必定会触发onPause方法。
onCreate、 onStart
onCreate方法会在第一次创建的时候执行,紧接着便会执行onStart方法,之后页面被完全遮挡会执行onStop方法,再返回的时候一般便会执行onRestart –> onStart方法, 但是如果如果这时候App内存不够需要更多的内存的时候,App便会杀死该进程,结束掉该Activity,所以这时候再返回的时候便会重新执行onCreate –> onStart –> onResume方法。