天天看點

關于Activity 生命周期,在頁面切換時方法的執行順序

     Activity生命周期是學習安卓開發要掌握的最基本知識.那麼在頁面建立到顯示出來,頁面切換至背景,或者頁面以窗體形式可見不可交換狀态,都執行了生命周期的那些方法,順序是怎樣的你是否都了解清楚呢?設定了不同的啟動模式之後又走了哪些方法?這也是面試中必問的問題.這篇文章通将過demo的方式将預設啟動模式的每個生命周期方法都列印出來.

    建立了三個activity.每個Activity頁面隻有一個按鈕,點選順序Main->Two->Three.

關于Activity 生命周期,在頁面切換時方法的執行順序

      因為這裡的啟動模式是預設(standard),每啟動一個Activity,就會建立一個執行個體放在棧頂,順序啟動三個activity : main -> Two -> Three, 而正常的傳回也是根據打開順序,從棧頂依次移除出棧.activity棧中執行個體圖簡單如下:

關于Activity 生命周期,在頁面切換時方法的執行順序

啟動時:

關于Activity 生命周期,在頁面切換時方法的執行順序

點選跳轉Two:

關于Activity 生命周期,在頁面切換時方法的執行順序

ThreeActivity 這裡在manifest中添加了下面的一行代碼,設定為窗體模式

   android:theme="@android:style/Theme.Dialog"

點選跳轉Three 效果圖制作如下:

關于Activity 生命周期,在頁面切換時方法的執行順序

生命周期方法執行順序如下:

關于Activity 生命周期,在頁面切換時方法的執行順序

  可以看到TwoActivity此時處于可見但不可互動狀态.啟動ThreeActivity時正常的執行了onCreate() -> onStart() -> onResume(),但TwoActivity相比少了onStop() 方法的執行.

點選上圖中遮罩部分,使第二個頁面獲得焦點

關于Activity 生命周期,在頁面切換時方法的執行順序

生命周期調用如下:

關于Activity 生命周期,在頁面切換時方法的執行順序

可以看到第二個頁面隻調用了onResume()方法.而且執行順序是: 第三個頁面onPause()->第二個頁面onResume()->第三個頁面onStop()->第三個頁面onDestroy().接下來我們再點選傳回按鈕,應該是從第二個頁面傳回第一個頁面(main),看一下生命周期會調用哪些方法

關于Activity 生命周期,在頁面切換時方法的執行順序

這裡第一個頁面(main)調用了onRestart()->onStart(),而沒有onCreate(),是因為activity棧中有目前要顯示(main)的activity執行個體.

在Main頁面,直接點選HOME鍵,傳回桌面,生命周期方法執行如下:

關于Activity 生命周期,在頁面切換時方法的執行順序

在桌面點選應用程式,如下:

關于Activity 生命周期,在頁面切換時方法的執行順序

點選傳回鍵,正常退出應用程式:

關于Activity 生命周期,在頁面切換時方法的執行順序

可以總結一下:

  在我們頁面互動中,界面總是非A即B的狀态.是以A跳轉B,在A執行到onPause()之後,B頁面沒有執行個體,就onCreate()->onStart()->onResume();有則調用onRestart()->onResume(),一定是在B的onResume()執行後A才執行onStop() .  頁面處于可見不可互動狀态時,調用onPause().

下一篇文章将會分析設定了不同的啟動模式之後,頁面跳轉過程中調用了哪些方法?

繼續閱讀