Activity生命週期

其實這篇我是想轉一發來着的,但是看了半天沒看到什麼滿意的,好不容易看到一篇還不允許轉載………….

那麼還是自己來吧,以下是我的一些對官方文檔的理解和對自己所看書籍知識的回憶


首先要知道的是,Android使用Task來管理活動,一個Task就是一組存放在棧裏的活動的集合,這個棧被稱作返回棧(Back Stack)

從數據結構的知識我們可以知道,棧是一種後進先出的數據結構,在默認情況(Activity有四種啓動模式,請詳情點擊)下,當我們啓動一個新的Activity,它會在返回棧中入棧並處於棧頂的位置。當我們按下Back鍵或者調用finish()方法去銷燬一個活動時,處於棧頂的活動會出棧,那麼前一個入棧的活動就會重新處於棧頂的位置。系統總是會顯示處於棧頂的活動給用戶。


下面上圖:
Android Lifecycle

這是一幅Activity生命週期流程圖,這些矩形方框裏是一些回調方法,當Activity在兩個狀態切換時,我們可以重寫這些回調方法來執行我們想要的操作。


  • 活動狀態
    Activity在生命週期裏最多有四種狀態
    1.運行狀態當活動位於棧頂時,活動就處於運行狀態。

    2.暫停狀態當活動失去了焦點但仍然可見時就進入了暫停狀態,此時該活動已經不在棧頂。(舉個栗子,一個對話框位於棧頂,但它並不會佔滿整個屏幕,此時後面的那個Activity就位於暫停狀態)。處於暫停狀態的活動時完全存活的,除非在內存極低的情況下,系統纔會去考慮回收這種活動。

    3.停止狀態當活動被其他活動完全遮蓋不再處於棧頂位置的時候,就進入了停止狀態。系統仍然會爲這種活動保存相應的狀態和成員變量,但這並不完全可靠,當其他地方需要內存的時候,處於停止狀態的活動有可能會被系統回收。

    4.銷燬狀態當一個活動從返回棧中移除後就變成了銷燬狀態。當我們想要再將這個Activity展現給用戶的時候,必須要完全重新開始和修復到之前的狀態。系統最傾向於回收處於這種狀態的Activity,從而保證手機的內存充足。


  • 回調方法

    1.onCreate():所有的Activity都會實現這個方法。它會在Activity第一次被創建的時調用。我們應該在這個方法中完成活動的初始化操作,比如加載佈局,綁定事件等等。

    2.onStart()當Activity由不可見變爲可見時調用該方法。接着它後面的是onResume()或onStop()。

    3.onResume()當activity開始要和用戶進行交互的時候調用該方法。這個時候Activity一定位於棧頂的位置,並且處於運行狀態。

    4.onPause()當系統準備去啓動或者恢復另一個Activity時調用。我們通常會在該方法中保存一些沒有保存的關鍵數據,釋放動畫或其他消耗CPU的資源。這個方法的執行速度一定要快,不然會影響到新的棧頂活動的使用。

    5.onStop()當Activity完全不可見時調用該方法。注意是完全不可見,比如新活動是一個對話框的時候,執行的就應該是onPause()而不是onStop()。

    6.onDestroy()這個方法在Activity被銷燬之前調用,這之後activity就將處於銷燬狀態。

    7.onRestart()這個方法在Activity重新啓動時調用,就是已經停止了,又要轉向運行狀態的時候調用。由圖也可知這個方法後面後面總是onStart()。


  • 活動生存期
    由上面的回調方法又可以將Activity分爲三種生存期。

    1.完整生存期Entire lifetime)——Activity在onCreate()方法和onDestroy()方法之間所經歷的就是完整生存期。Activity會在onCreate()方法中完成各種初始化操作,在onDestroy()方法中完成釋放內存的操作。

    2.可見生存期Visible lifetime)——Activity在onStart()方法和onStop()方法之間所經歷的,就是可見生存期。在這段生存期內,Activity對於用戶一直可見,即便可能有些無法與用戶進行交互。我們可以使用這兩個方法,管理那些對用戶可見的資源。比如在onStart()方法中對資源進行加載,而在onStop()方法中對資源進行釋放,從而保證處於停止狀態的Activity不會佔用太多內存。

    3.前臺生存期Foreground lifetime)——Activity在onResume()方法和onPause()方法之間所經歷的,就是前臺生存期。在前臺生存期內,Activity總是處於運行狀態的,此時的Activity是可以與用戶進行交互的,我們平時看到和接觸最多的就是這個狀態下的Activity。


知識點參考自Android官方文檔及《第一行代碼》/郭霖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章