Android Activity生命週期和狀態

        本文是讀了《Android 羣英傳》第八章--Activity和Activity調用棧--以後的讀書筆記,詳情見書。學習

        Activity算得上是Android裏最多見也最重要的組件了,通常狀況下都被翻譯爲「活動」,但實際上我一直都是把它理解爲「界面」,畢竟在Android四大組件裏,只有Activity是和view直接進行交互的。從一開始學習接觸Android開始,接觸的第一行代碼就是有關Activity的,因此看看書整理記錄一下。spa

        1、起源翻譯

        Activity是與用戶交互的第一窗口,當開發者建立了一個Activity以後,能夠經過setContentView()方法來給Activity關聯一個顯示界面,並以此爲基礎提供給用戶進行交互。對象

        2、Activity的生命週期和狀態blog

     Activity的生命週期圖很是常見,選擇了Android 100網上的圖以下所示:生命週期


       對於生命週期的狀態,描述的文章不少,就不一一敘述了。資源

       根據這個生命週期能夠獲得一個Activity的狀態有如下四種:開發

       ①Active。活躍的狀態,即在onResume()之後Activity處於前臺可視化,整個Activity最頂層的狀態,能夠和用戶直接進行交流;it

       ②Pause。暫停的狀態,當一個Activity被另外一個新的非全屏的或者透明的Activity覆蓋時候,此時該Activity是去焦點,暫時失去了和用戶交流的能力,可是其狀態、變量等都還保留着。讀書筆記

       ③Stop。結束的狀態,當一個Activity被另外一個全屏的非透明Activity徹底覆蓋時候的狀態,此時該Activity已經不可見了,可是狀態還保留着。

       ④killed。銷燬的狀態,當一個Activity被系統回收或者人爲關閉後的狀態,此時Activity已經關閉。 

       上面四種狀態結合Activity的生命週期來看,咱們能夠發現,一個運行着的Activity比較妥當的生命週期狀態有三個:onResume(),onPause(),onStop()。其餘的生命週期都只是過渡的週期,不少就會進入下一個狀態。

        

      3、Activity的生命週期分析。 

      根據生命週期圖,能夠把Activity的生命週期分爲四個過程。

       1.Activity的啓動和銷燬過程

       生命週期裏的onCreat()方法是建立基本的UI元素,經過setContentView()方法關聯上相關View。在執行完了onCreat()方法後會立刻執行onStart()方法,執行之後Activity其實就處於個可視化的狀態了,可是仍是沒顯示到前臺,沒法和用戶進行交互。當執行完了onResume()方法後Activity就會處於活躍狀態能夠和用戶交互了。

       而當一個Activity執行了onDestory()方法後,Activity裏的資源會被銷燬,Activity處於killed狀態,一個生命週期結束。


       2.Activity的暫停和恢復過程

       當處於棧頂的Activity部分不可見時候,系統會執行onPause()方法,釋放掉系統資源,好比Camera、sensor、receivers,使Activity處於一個暫停的狀態。

       當結束組賽後,就會調用onResume()方法,從新初始化在onPause()中被釋放的資源,使Activity恢復到active狀態。


       3.Activity的結束過程

       當處於棧頂的Activity由部分不可見變爲徹底不可見時候,系統會執行onStop()方法,此時該Activity再也不處於前臺,棧頂位置被其餘Activity替代。

       若是此Activity要從新回到前臺,會經歷以下的聲明週期:onRestart()----onStart()----onResume()。


       4.Activity的從新建立過程

       當一個Activity長期處於Stop的狀態時候,系統就有可能回收這個Activity,此時系統會將該Activity的狀態經過onSaveInstanceState()方法保存在Bundle對象裏,當須要恢復這個Activity時候,能夠調用OnRestoreInstanceState()方法與onCreat()方法獲取到這個參數----Bundle savedInstanceState。如圖所示:


       不過若是用戶用finish()方法結束Activity,系統不會自動執行onSaveInstanceState()方法。