是什麼?android
acntivity是一組包含用戶界面的組件,主要用於和用戶進行交互的。也就是用戶看獲得的東西就是activity。app
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:單一實例模式
他會運行在本身單獨,獨立的任務棧裏面,