Android活動生命週期

Android中的活動是可以層層疊加的,每啓動一個新的活動,就會覆蓋在原活動之上,點擊back鍵就會銷燬最上面的活動,下面一個活動就會顯示出來。

android主要用任務(task)來管理活動,一個task就表示 一組存在棧(叫做返回棧:Back Stack)內的活動

啓動一個活動,它便會入棧,位於棧頂,銷燬一個活動時,棧頂活動出棧,如下圖


活動有4種狀態

1、運行狀態

    活動位於棧頂,處於屏幕最前方,系統也不會回收

2、暫停狀態

    活動不再處於棧頂,但依然用於可見(如棧頂的活動是透明的或者棧頂活動並不是鋪滿整個手機屏幕),此時處於暫停狀態, 一般系統不會回收

3、停止狀態

    活動不位於棧頂,而且完全不可見,被其他活動完全遮擋,    其他地方需要內存時系統有可能回收

4、銷燬狀態

    被銷燬(不位於棧頂),就會被系統回收


在每個不同的狀態階段,Adnroid系統對Activity內相應的方法進行了回調。因此,我們在程序中寫Activity時,一般都是繼承Activity類並重寫相應的回調方法。

有以下七種方法

1.onCreate()

每個活動都會有的方法,在活動第一次被創建的時候調用

2.OnStart()

這個活動在活動由不可見變爲可見的時候調用

3.OnResume()

這個方法在活動準備好和用戶進行交互的時候調用,此時的活動一定位於返回棧的棧頂,並且處於運行狀態。

4. onPause()

這個方法在系統準備去啓動或者恢復另一個活動的時候調用。 我們通常會在這個方法中將一些消耗 CPU 的資源釋放掉,以及保存一些關鍵數據,但這個方法的執行速度一定要快,不然會影響到新的棧頂活動的使用。

5.onStop()

這個方法在活動完全不可見的時候調用。它和 onPause()方法的主要區別在於,如果啓動的新活動是一個對話框式的活動,那麼 onPause()方法會得到執行,而 onStop()方法並不會執行。

6.onDestroy()

這個方法在活動被銷燬之前調用,之後活動的狀態將變爲銷燬狀態。

7.onRestart()

這個方法在活動由停止狀態變爲運行狀態之前調用,也就是活動被重新啓動了。

以上七個方法中除了 onRestart()方法,其他都是兩兩相對的,從而又可以將活動分爲三種生存期。

1.    完整生存期

活動在 onCreate()方法和 onDestroy()方法之間所經歷的,就是完整生存期。一般情況下,一個活動會在 onCreate()方法中完成各種初始化操作,而在 onDestroy()方法中完 成釋放內的操作。

2.    可見生存期

活動在 onStart()方法和 onStop()方法之間所經歷的,就是可見生存期。在可見生存期內,活動對於用戶總是可見的,即便有可能無法和用戶進行交互。我們可以通過這兩個方法,合理地管理那些對用戶可見的資源。比如在 onStart()方法中對資源進行加載, 而在 onStop()方法中對資源進行釋放,從而保證處於停止狀態的活動不會佔用過多內存。

3.    前臺生存期

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


三個階段:

1.開始Activity:在這個階段依次執行3個生命週期的方法,分別是:onCreate、onStart和onResume方法

2.Activity重新獲得焦點:如果Activity重新獲得焦點,會依次執行3個方法,onRestart、onStart和onResume

3.關閉Activity:當Activity被關閉時系統會依次執行3個方法,onPause、onStop和onDestory。



從以上的Activity的生命週期不難看出,該圖包含了兩層循環,

第一層循環是:onPause->onResume->onPause

第二層循環是:onStart->onRestart->onResume->onPause->onStop

第一層循環稱爲是 焦點生命週期,第二層循環可以視爲生命週期。

也就是說,第一層循環是在Activity焦點獲得與失去的過程中循環,在這個過程中,Activity始終是可見的

第二層循環是Activity可見和不可見的過程中循環。


一個最簡單的完整的Activity生命週期會按照如下順序回調:onCreate -> onStart -> onResume -> onPause -> onStop -> onDestroy。


在實際應用場景中,假設A Activity位於棧頂,此時用戶操作,從A Activity跳轉到B Activity

開始時,A被實例化,執行的回調有A:onCreate -> A:onStart -> A:onResume。

當用戶點擊A中按鈕來到B時,假設B全部遮擋住了A,將依次執行A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onStop。

此時如果點擊Back鍵,將依次執行B:onPause -> A:onRestart -> A:onStart -> A:onResume -> B:onStop -> B:onDestroy。

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