說來慚愧,雖然已經做了一年多的android開發,但是最近被人問起activity的生命周期的時候,卻感覺自己並不能很自信很確定的回答對方的問題,對activity的生命周期的理解還不透徹啊。
既然發現了問題,那咱就得解決問題,不就個生命周期,能有多復雜。
首先看看android developers 網上的activity的生命周期圖:
activity啟動的時候:onCreate ---> onStart ---> onResume 這個過程不用多說,大家都知道。
這里主要講講: 何時onPause, 何時onStop,何時onDestory; 以及恢復的時候,何時onRestart,何時onResume。
為了方便說明這里把當前activity稱為MainActivity,其他的activity稱為SecondActivity、ThirdActivity等等。
通過上圖的我們可以看出activity從running狀態跳轉到onPause狀態的原因是:Another activity comes into the foreground. 也就是說有另外一個actvity被啟動並運行了,比如說MainActivity通過startActivity啟動了SecondActivity,那么SecondActivity就在ui視圖的最頂層了,而MainActivity不再是最頂層的activity了,此時就會onPause了,此時我們依稀還能看到MainActivity,只是MainActivity已經站在他人之后了。
而當MainActivity完全被SecondActivity擋住,完全看不見的時候,此時MainActivity就會onStop了。我們看看上圖從onPause到onStop的原因是:the activity is no longer visiable. 也就是說此時MainActivity完全不可見了,從這里我們可以猜測當按下home鍵的時候,當前activity就會處於onStop的狀態。
從actvitiy的生命周期圖中,我們可以看出activity是可以停留在onPause和onStop在這兩個狀態上的,因為可以相應的恢復。
那么何時停留在onPause,何時停留在onStop呢?
下圖的MainActivity就是處於onPause狀態:

因為這里的second actvity是dialog樣式:
<activity android:name=".SecondActivity" android:theme="@android:style/Theme.Dialog">
也就驗證了當MainActivity不再在最頂端,但仍然可見的時候,MainActivity就處於onPause狀態,此時如果退出(back鍵)second activity,那么MainActivity就會onResume。
下圖的MainActivity就是處於onStop狀態(注意,這里的third activity 是在 MainActivity中通過startActivity啟動的):

因為此時MainActivity已經完完全全被Thrid actvity擋住了,完全不可見了,所以MainActivity處於onStop狀態,如果此時退出Thrid activity(back鍵),那么MainActivity就會onRestart().
何時onDestory呢?
當在MainActivity中按back鍵,退出時,最終就會走到onDestory,或者在代碼中調用finish()的時候也會走到onDestroy這一步。
對於activity生命周期圖的左側部分:

當MainActivity處於onPause和onStop狀態時,當更高優先級的apps需要內存,而此時系統內存不夠了,那么android系統就會將MainActivity所在的進程給殺了以釋放資源。
當然被殺了之后,想重生,那必須得從頭來過: onCreate ---> onStart() ---> onResume().
