寫在前面:學(xué)習(xí)安卓很長一段時間了,以前沒有寫博文的習(xí)慣,都是將筆記寫在word上面,一次電腦壞了,沒有備份到云端,有種想哭的沖動,所以將他寫在簡書上面,溫故而知新,也可以防止丟失!??!
activity被稱之為活動(界面),是app中直接與用戶交互,運(yùn)行在主線程
一:activity的生命周期:

(1)正常時候的生命周期:
1.啟動activity:onCreate->onStart->onResume? activity進(jìn)入運(yùn)行狀態(tài)
2.結(jié)束activity:onPause->onStop->onDestory? activity退出
3.當(dāng)前activity被其他activity覆蓋在上面或鎖屏:系統(tǒng)會調(diào)用onPause方法,暫停當(dāng)前activity的執(zhí)行
4.當(dāng)前activity由被覆蓋狀態(tài)回到前臺或者解鎖屏:系統(tǒng)會調(diào)用onResume方法,再次進(jìn)入運(yùn)行狀態(tài)
5.當(dāng)前activity轉(zhuǎn)到新的activity界面或按home鍵回到主屏,自身退居后臺:onPause->onStop,進(jìn)入停滯狀態(tài)(最小化)
6.用戶后退到此activity:onRestart->onStart->onResume,進(jìn)入運(yùn)行狀態(tài)(最大化)
7.當(dāng)處于2和4的狀態(tài),系統(tǒng)內(nèi)存不足的時候,會殺死當(dāng)前activity,用戶后退到當(dāng)前activity的時候:onCreate->onStart->onResume,進(jìn)入運(yùn)行狀態(tài)
(2)異常時候的生命周期
橫豎屏切換的時候的生命周期:onSaveInstanceState(保存一些臨時數(shù)據(jù))->onPause->onStop->onDestory->onCreate->onStart->onRestoreInstanceState(恢復(fù)一些臨時數(shù)據(jù))->onResume
眾所周知在橫豎屏切換的時候,activity會重新走一遍onCreate方法,比如格斗游戲,當(dāng)重新走onCreate方法的時候,角色會滿血復(fù)活,這樣顯然是不行的,那么我們一般會怎樣解決呢?,一般情況我們都會在androidmanifest.xmll中的activit元素加入這個屬性 ? ? ? ? ? ? ? Android:configChanges="orientation|keyboardHidden" 即可,設(shè)置屏幕朝向不敏感
二:activity的四種啟動模式
activity的啟動模式有四種:
standard
? ? 默認(rèn)的啟動模式,開啟一個activity,系統(tǒng)會創(chuàng)建這個activity的實(shí)例對象,將其放在應(yīng)用程序任務(wù)棧的棧頂,也就是說,每次啟動一個activity,新的activity會疊加在舊的activity上面,按返回鍵退出的時候,按照先進(jìn)后出的原則依次退棧。
singleTask?
? ?單一任務(wù)模式,開啟一個activity,系統(tǒng)會去應(yīng)用程序的任務(wù)棧中查找有沒有這個activity的實(shí)例對象,如果有,就會將這個activity之前的所有activity的實(shí)例對象,使其置于任務(wù)棧的棧頂,如果沒有,系統(tǒng)會在棧頂創(chuàng)建這個activity的實(shí)例對象
singleTop
? ?單一頂部模式,開啟一個activity,系統(tǒng)會去應(yīng)用程序的任務(wù)棧的棧頂查找有沒有這個activity的實(shí)例對象,如果有,就復(fù)用棧頂?shù)腶ctivity實(shí)例對象,如果沒有,就在棧頂創(chuàng)建activity的實(shí)例對象
singleInstance
? ? 單一實(shí)例模式,開啟一個activity,系統(tǒng)會給這個activity創(chuàng)建一個單獨(dú)的任務(wù)棧,這個任務(wù)棧只有這一個activity的實(shí)例對象,獨(dú)一無二。
設(shè)置Activity的啟動模式,只需要在AndroidManifest.xml里對應(yīng)的標(biāo)簽設(shè)置Android:launchMode屬性,例如:
