android Activity生命週期總結

是什麼?android

acntivity是一組包含用戶界面的組件,主要用於和用戶進行交互的。也就是用戶看獲得的東西就是activityapp

 

Activity是怎麼回退的:佈局

android是使用任務task去管理activity的,spa

Android中的activity是層疊顯示的,每啓動一個activity,新的activity就會覆蓋在舊的上面,若是按下返回按鈕,就會銷燬最上層的,這是在這層下面的就會顯示出來。。blog

 

Activity的4種狀態:生命週期

運行狀態:事件

這時activity在棧頂,對用戶是可見的,系統不管如何,也不會去回收一個正在運行的activity。內存

 

暫停狀態:資源

Ativity不在棧頂了,仍然可見的時候,這個時候處於暫停狀態,好比彈出一個dialog的時候,這個時候棧頂的activity就是暫停狀態,可是對用戶仍是可見的,系統會在內存極低的時候,回收掉這個activity。it

 

中止狀態:

Ativity不在棧頂了,而且徹底不可見的時候,就進入了中止狀態,系統會對這類活動進行短暫的保活,並非徹底可靠的,若是其餘地方須要內存的時候,處於停住狀態就會被回收。

 

銷燬狀態:

當從返回棧中移除後,就變成了銷燬狀態,系統最喜歡回收這種東西了。

 

Activity的生命週期。

 

OnCreate()

第一次建立的時候調用。通常用來作一些出數據的操做。好比,加載佈局,初始化事件。。

 

OnStart()

在不可見準備變爲可見的時候調用。

 

OnResume()

可見,而且有焦點交互的時候,這個時候,這個activity必定在返回棧的棧頂。而且處於運行狀態。

 

OnPause()

系統準備去啓動||恢復另一個activity的時候調用,

 

OnStop()

在activity徹底不可見的時候調用,

通常在這裏都會把一些在當前這個activity的耗損資源的一些操做釋放了,和保存一些關鍵的數據。這個方法必定要快,不能超過10秒,否者系統就會報ARN了。

和上面的區別在,若是打開新的活動是一個dialog,那麼OnPause會執行,onStop不會執行。

 

OnDestroy()finish的時候調用

銷燬以前調用,以後這個activity的狀態就是銷燬狀態了。

 

OnRestart()

由中止狀態變爲運行狀態以前調用,就是重啓的時候調用,

 

OnSaveInstanceState()

只有在activity即將銷燬的時候,而且有機會從新顯示的時候纔會調用,正常生命週期不會調用。

 

生命週期的3種場景劃分

完整生命週期:

從onCreate--->OnDestroy。。通常狀況下,onCreate方法中完成初始化操做,onDestroy完成釋放的操做。

 

 

可見週期:

 

OnStart-->OnStop(),這段週期內,對用戶是可見的,並不必定須要和用戶交互,

 

前臺週期:

 

OnCreate-->OnResume(),這段週期,是能夠和用戶交互的週期,activity常常會在onPause和OnResume中交互很頻發,列如,切換到後臺,切回來,鎖屏,來電話了,被遮擋了,多app切換來回,等等,因此通常建議這兩個方法應當很是簡潔,不該該有耗時操做。。

 

異常生命週期:

                                            

OnPause-->onSaveInstanceState(bundle)--->OnStop->onDestory-->onCreate(bundle)---OnResume()

 

可是在onStop被調用以前系統會調用onSaveInstanceState(bundle)保存數據,這個方法只會在activity異常終止狀況下才會調用,

,若是出現異常週期,那onCreate的bundle必定不會是空的。

  

狀況1.資源相關的系統配置發生改變致使Activity被殺死並從新建立(如橫豎屏切換)

這種狀況,能夠經過配置configChanges來解決,

 

狀況2:資源內存不足致使低優先級的Activity被殺死

沒法避免,作好數據恢復。

 

 

回收場景優先級:

1.Android不會回收正在處於可見狀態的的activity

2.內存不夠的時候,會回收不可見的Activity。若是被回收了,這個activitu會自動調用OnSaveInstanceState,這個辦法,用來保存數據的,

 

前臺<---可見但非前臺(dialog)<---後臺(被暫停的Activity)

 

 

4種啓動模式

 

能夠經過設置activity的launchMode來指定啓動模式。

 

Standard:默認的模式

不值得的狀況下,默認就是這種。

每開啓一個新的activity,系統就會建立一個新的活動,插入棧頂,而且顯示,後進先出,無論棧裏有沒有。

 

 

SingleTop棧頂複用模式

若是發現棧頂已經存在,就不會再建立了。

若是不在棧頂,那仍是會重複建立。

 

SingleTask棧內複用模式

若是棧有,直接使用,不會建立,而且在該棧上面的activity所有出棧,

 

SingleInstance:單一實例模式

他會運行在本身單獨,獨立的任務棧裏面,