Activity生命週期深入理解2

鴨脖發表於2012-07-23

今天又仔細的瞭解了一下activity的生命週期,主要任務是辨別在使用者按下返回鍵和使用intent進行跳轉的時候所執行的動作。


我們的實驗過程是這樣的。新建兩個activity,分別是activity1,activty2,上面分別有一個button,執行從1跳轉到2,以及從2跳轉到1的過程。實驗過程是:從activity1跳到2,再從2跳到1,然後按下返回鍵,再按下返回鍵,再按下返回鍵。


那麼這樣的過程主要分為五個階段。

我們都知道,當執行跳轉的時候,實際上是new 了一個目標activity的一個物件,然後將其壓入了棧中。我們都知道處在棧的最上面的activity將會處於resume狀態,可見,可與使用者進行互動。按下返回鍵就是從棧中彈出最頂層的activity,並且將其destroy掉。那麼這五個過程分別是:

第一個過程

1的oncreate,1的onStart,1的onResume

那麼這三個過程不用說了,很簡單


第二個過程,為向2跳轉的過程

先是1的onPause,這樣1不能再和使用者互動了,然後開始準備2,先是2的oncreate方法,然後入棧,然後onStart,然後onResume,這個時候2準備好了,然後1便可以onStop,這便是第二個過程


第三個過程,向1跳轉的過程

和過程2一樣,但是這時候要注意,在activity的棧中現在有三個activity,從下到上分別為舊的activity1,然後是2,然後是新的activity1,新的處於resume狀態。


第四個過程,按下返回鍵

這時候是從棧中彈出元素的過程,但是在徹底彈出之前得準備好將要啟用的activity。過程如下:

1的onPause,然後是2的onRestart方法,然後是2的onStart方法,注意由於是在棧中儲存的所以不會再create,然後是onResume方法,然後是onStop方法,最後徹底彈出,onDestroy方法


第五個過程,按下返回鍵

和第四個過程一樣


當到達棧底的時候,彈出操作就無效了,比如home那個介面,你再按下返回鍵的時候是不會進行跳轉的。


相關文章