生命周期
- onCreate() 首次創(chuàng)建 Activity 時調(diào)用怠惶。 您應(yīng)該在此方法中執(zhí)行所有正常的靜態(tài)設(shè)置 — 創(chuàng)建視圖、將數(shù)據(jù)綁定到列表等等。
- onContentChanged() 當(dāng)Activity的布局改動時奸例,即setContentView()或者addContentView()方法執(zhí)行完畢時就會調(diào)用該方法, 例如向楼,Activity中各種View的findViewById()方法都可以放到該方法中查吊。
- onPostCreate() onCreate方法徹底執(zhí)行完畢的回調(diào)
- onRestart() 在 Activity 已停止并即將再次啟動前調(diào)用。
- onStart() 在 Activity 即將對用戶可見之前調(diào)用湖蜕。
- onResume() 在 Activity 即將開始與用戶進(jìn)行交互之前調(diào)用逻卖。 此時,Activity 處于 Activity 堆棧的頂層昭抒,并具有用戶輸入焦點(diǎn)评也。
- onPostResume() onResume方法徹底執(zhí)行完畢
- onPause() 當(dāng)系統(tǒng)即將開始繼續(xù)另一個 Activity 時調(diào)用。 此方法通常用于確認(rèn)對持久性數(shù)據(jù)的未保存更改灭返、停止動畫以及其他可能消耗 CPU 的內(nèi)容盗迟,諸如此類。 它應(yīng)該非常迅速地執(zhí)行所需操作熙含,因為它返回后罚缕,下一個 Activity 才能繼續(xù)執(zhí)行。
- onStop() 在 Activity 對用戶不再可見時調(diào)用怎静。如果 Activity 被銷毀邮弹,或另一個 Activity(一個現(xiàn)有 Activity 或新 Activity)繼續(xù)執(zhí)行并將其覆蓋,就可能發(fā)生這種情況蚓聘。
- onDestroy() 在 Activity 被銷毀前調(diào)用肠鲫。
保存Activity狀態(tài)
- onSaveInstanceState() 系統(tǒng)會先調(diào)用 onSaveInstanceState(),然后再使 Activity 變得易于銷毀或粮。系統(tǒng)會向該方法傳遞一個 Bundle导饲,您可以在其中使用 putString() 和 putInt() 等方法以名稱-值對形式保存有關(guān) Activity 狀態(tài)的信息。
- onRestoreInstanceState() 如果系統(tǒng)終止您的應(yīng)用進(jìn)程氯材,并且用戶返回您的 Activity渣锦,則系統(tǒng)會重建該 Activity,并將 Bundle 同時傳遞給 onCreate() 和 onRestoreInstanceState()氢哮。
啟動模式
Activity的啟動模式有4種袋毙,分別是standard, singleTop冗尤, SingleTask听盖,singleInstance胀溺,可以在AndroidMainifest.xml文件中指定每一個Activity的啟動模式。
- Standard 是Android的默認(rèn)啟動模式皆看,你不在配置文件中做任何設(shè)置仓坞,那么這個Activity就是standard模式,這種模式下腰吟,Activity可以有多個實(shí)例无埃,每次啟動Activity,無論任務(wù)棧中是否已經(jīng)有這個Activity的實(shí)例毛雇,系統(tǒng)都會創(chuàng)建一個新的Activity實(shí)例嫉称,以下是實(shí)驗驗證。
- SingleTop singleTop模式的Activity已經(jīng)位于任務(wù)棧的棧頂灵疮,再去啟動它時织阅,不會再創(chuàng)建新的實(shí)例,如果不位于棧頂,就會創(chuàng)建新的實(shí)例震捣,現(xiàn)在把配置文件中FirstActivity的啟動模式改為SingleTop荔棉,我們的應(yīng)用只有一個Activity,F(xiàn)irstActivity自然處于任務(wù)棧的棧頂伍派。對于每次啟動Activity江耀,會調(diào)用onNewIntent()函數(shù)
- SingleTask SingleTask模式的Activity在同一個Task內(nèi)只有一個實(shí)例,如果Activity已經(jīng)位于棧頂诉植,系統(tǒng)不會創(chuàng)建新的Activity實(shí)例祥国,和singleTop模式一樣。但Activity已經(jīng)存在但不位于棧頂時晾腔,系統(tǒng)就會把該Activity移到棧頂舌稀,并把它上面的activity出棧。修改上面的程序灼擂,新建一個SecondActivity,將FirstActivity設(shè)置為singleTask啟動模式壁查,并讓它啟動SecondActivity,再讓SecondActivity來啟動FirstActivity剔应。
- SingleInstance 而singleInstance Activity在整個系統(tǒng)里只有一個實(shí)例睡腿,啟動一singleInstanceActivity時,系統(tǒng)會創(chuàng)建一個新的任務(wù)棧峻贮,并且這個任務(wù)棧只有他一個Activity席怪。SingleInstance模式并不常用,如果我們把一個Activity設(shè)置為singleInstance模式纤控,你會發(fā)現(xiàn)它啟動時會慢一些挂捻,切換效果不好,影響用戶體驗船万。它往往用于多個應(yīng)用之間刻撒,例如一個電視launcher里的Activity骨田,通過遙控器某個鍵在任何情況可以啟動,這個Activity就可以設(shè)置為singleInstance模式声怔,當(dāng)在某應(yīng)用中按鍵啟動這個Activity态贤,處理完后按返回鍵,就會回到之前啟動它的應(yīng)用捧搞,不影響用戶體驗抵卫。