其實這篇我是想轉一發來着的,但是看了半天沒看到什麼滿意的,好不容易看到一篇還不允許轉載………….
那麼還是自己來吧,以下是我的一些對官方文檔的理解和對自己所看書籍知識的回憶
首先要知道的是,Android使用Task來管理活動,一個Task就是一組存放在棧裏的活動的集合,這個棧被稱作返回棧(Back Stack)。
從數據結構的知識我們可以知道,棧是一種後進先出的數據結構,在默認情況(Activity有四種啓動模式,請詳情點擊)下,當我們啓動一個新的Activity,它會在返回棧中入棧並處於棧頂的位置。當我們按下Back鍵或者調用finish()方法去銷燬一個活動時,處於棧頂的活動會出棧,那麼前一個入棧的活動就會重新處於棧頂的位置。系統總是會顯示處於棧頂的活動給用戶。
下面上圖:
這是一幅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官方文檔及《第一行代碼》/郭霖