正常情況下撩满,除了Window,Dialog和Toast担神,我們能見到的界面只有Activity怕磨。
典型情況下的生命周期:
(1) onCreate:表示Activity 正在被創(chuàng)建置尔。此方法中我們可以做初始化工作杠步,調(diào)用setContentView加載頁面布局資源,初始化Activity所需數(shù)據(jù)榜轿。
(2)onRestart 幽歼,Activity重新啟動,從后臺恢復(fù)過來谬盐。onPause和onStop執(zhí)行過了甸私。
(3)onStart:Activity正在被啟動,已經(jīng)可見但沒有在前臺飞傀,無法與用戶交互皇型。
(4)onResume:Activity已經(jīng)可見诬烹,出現(xiàn)在前臺。
(5)onPause:Activity停止運行弃鸦,緊接著onStop會被調(diào)用绞吁。此時可以做一些存儲數(shù)據(jù),停止動畫的工作唬格。但不能太耗時間家破,新的Acitivity在前一個Activity 的onPause執(zhí)行完之后,執(zhí)行onResume
(6)onStop:Activity即將停止购岗,可以做一些稍微重量級的回收工作员舵。
(7)onDestroy:表示Activity即將銷毀。做資源回收工作和最后的資源釋放藕畔。
1. 針對一個特定的Activity马僻,第一次啟動,回調(diào):onCreat->onStart->onResume.
2. 用戶打開新的Activity注服,或者切換會桌面時韭邓,回調(diào):onPause->onStop.
注意:如果新的Activity 采取了透明主題,則當(dāng)前的Activity不會回調(diào)onStop
3. 當(dāng)用戶再次回到Activity時溶弟,回調(diào):onRestart->onStart->onResume.
4. 當(dāng)用戶按back鍵回退是女淑,回調(diào):onPause->onStop->onDestroy
5.當(dāng)Activity被系統(tǒng)回收重新打開步驟和1一樣
6.onCreate <->onDestroy
? ?onStart<->onStop
? ?onResume<->onPause
異常情況下的生命周期
1. 資源的相關(guān)配置發(fā)生改變導(dǎo)致的Activity被殺死并重新創(chuàng)建
onSaveInstanceState()和onRestoreInstanceState(),系統(tǒng)自動為我們做了恢復(fù)工作辜御。
旋轉(zhuǎn)屏幕也算異常終止Activity
系統(tǒng)只在Activity異常終止的時候才會調(diào)用onSaveInstanceState 和onRestroeInstanceState來存儲和恢復(fù)數(shù)據(jù)鸭你,替他情況下不會出發(fā)這個過程。
2. 資源內(nèi)存不足導(dǎo)致低優(yōu)先級的Activity被殺死
Activity的優(yōu)先級:見http://www.reibang.com/p/f880733d07d5
當(dāng)系統(tǒng)的配置發(fā)生改變后擒权,Activity會被重新創(chuàng)建袱巨,如果不像系統(tǒng)重新創(chuàng)建Activity,可以給Activity指定configChanges屬性碳抄。不像讓Activity在屏幕旋轉(zhuǎn),或者鍵盤消失的時候重建愉老,
eg:android:configChanges="orientation|keyBoardHidden"
列出 Activity 將自行處理的配置更改。在運行時發(fā)生配置更改時剖效,默認情況下會關(guān)閉 Activity 然后將其重新啟動嫉入,但使用該屬性聲明配置將阻止 Activity 重新啟動。 Activity 反而會保持運行狀態(tài)璧尸,并且系統(tǒng)會調(diào)用其?onConfigurationChanged()?方法咒林。
注:應(yīng)避免使用該屬性,并且只應(yīng)在萬不得已的情況下使用爷光。 如需了解有關(guān)如何正確處理配置更改所致重新啟動的詳細信息垫竞,請閱讀處理運行時變更。
任何或所有下列字符串均是該屬性的有效值瞎颗。多個值使用“|”分隔 — 例如件甥,“l(fā)ocale|navigation|orientation”。
所有這些配置變更都可能影響應(yīng)用看到的資源值哼拔。 因此引有,調(diào)用?onConfigurationChanged()?時,通常有必要再次獲取所有資源(包括視圖布局倦逐、可繪制對象等)譬正,以正確處理變化。
但是檬姥,自從Android 3.2(API 13)曾我,在設(shè)置Activity的android:configChanges="orientation|keyboardHidden"后,還是一樣會重新調(diào)用各個生命周期的健民。因為screen size也開始跟著設(shè)備的橫豎切換而改變抒巢。所以,在AndroidManifest.xml里設(shè)置的MiniSdkVersion和 TargetSdkVersion屬性大于等于13的情況下秉犹,如果你想阻止程序在運行時重新加載Activity蛉谜,除了設(shè)置"orientation",你還必須設(shè)置"ScreenSize"崇堵。
解決方法:
AndroidManifest.xml中設(shè)置android:configChanges="orientation|screenSize“