oncreate()->onstart()->onResume()->onRestart()->onPouse()->onStop()->onDestory()
Activity的四種狀態
1 運行狀態
當一個 Activity 處于前臺時,即處于棧頂時,它是活動或者運行的狀態。
2 暫停狀態
當一個 Activity 失去焦點但仍然可見時,該 Activity 處于暫停狀態(例如,在一個 Activity 上彈出一個對話框,該對話框并不鋪滿屏幕,原先的 Activity仍然被用戶能看到)。一個處于暫停狀態的 Activity 仍然是完全存活的(它會保存之前的狀態和成員變量),但在內存極低的情況下會被系統殺死。
3 停止狀態
但一個 Activity 完全被另一個 Activity 隱藏時,該 Activity 處于停止狀態(即該 Activity 不再處于棧頂,并且不對用戶來說可見時)。處于停止狀態的 Activity 會保存之前的狀態和成員變量,但在系統內存不夠時,有可能被系統殺死(這種概率比處于暫停狀態的 Activity 高)。
4 銷毀狀態
當一個 Activity 被移出返回棧時,它就處于銷毀狀態。處于銷毀狀態的 Activity 最有可能被系統回收。
Activity的七個回調方法
1 onCreate:create表示創建,這是Activity生命周期的第一個方法,也是我們在android開發中接觸的最多的生命周期方法。它本身的作用是進行Activity的一些初始化工作,比如使用setContentView加載布局,對一些控件和變量進行初始化等。但也有很多人將很多與初始化無關的代碼放在這,其實這是不規范的。此時Activity還在后臺,不可見。所以動畫不應該在這里初始化,因為看不到……
2 onStart:start表示啟動,這是Activity生命周期的第二個方法。此時Activity已經可見了,但是還沒出現在前臺,我們還看不到,無法與Activity交互。其實將Activity的初始化工作放在這也沒有什么問題,放在onCreate中是由于官方推薦的以及我們開發的習慣。
3 onResume:resume表示繼續、重新開始,這名字和它的職責也相同。此時Activity經過前兩個階段的初始化已經蓄勢待發。Activity在這個階段已經出現在前臺并且可見了。這個階段可以打開獨占設備
4 onPause:pause表示暫停,當Activity要跳到另一個Activity或應用正常退出時都會執行這個方法。此時Activity在前臺并可見,我們可以進行一些輕量級的存儲數據和去初始化的工作,不能太耗時,因為在跳轉Activity時只有當一個Activity執行完了onPause方法后另一個Activity才會啟動,而且android中指定如果onPause在500ms即0.5秒內沒有執行完畢的話就會強制關閉Activity。從生命周期圖中發現可以在這快速重啟,但這種情況其實很罕見,比如用戶切到下一個Activity的途中按back鍵快速得切回來。
5 onStop:stop表示停止,此時Activity已經不可見了,但是Activity對象還在內存中,沒有被銷毀。這個階段的主要工作也是做一些資源的回收工作。
6 onDestroy:destroy表示毀滅,這個階段Activity被銷毀,不可見,我們可以將還沒釋放的資源釋放,以及進行一些回收工作。
7 onRestart:restart表示重新開始,Activity在這時可見,當用戶按Home鍵切換到桌面后又切回來或者從后一個Activity切回前一個Activity就會觸發這個方法。這里一般不做什么操作。
Activity的三個生存周期
activity的三個生存周期,我們從上圖也可以看的出來,主要介紹一下調用時間段。
完整生存期
Activity 的完整生存期是指在 onCreate() 方法第一次被調用和 onDestroy() 方法最后一次被調用之間的時間段;
應當在 onCreate() 方法內完成初始化操作, 并在 onDestroy() 方法內釋放內存。
可見生存期
Activity 的可見生存期是指在 onStart() 方法被調用和 onStop() 方法被調用之間的時間段;
在可見生存期內,Activity 是可見的,即使該 Activity 不再前臺和無法與用戶交互;
在 Activity 的整個生命周期,當 Activity 在對用戶可見和隱藏兩種狀態中交替變化時,系統可能會多次調用 onStart() 方法和 onStop() 方法。
前臺生存期
Activity 的前臺生存期是指在 onResume() 方法被調用和 onPause() 方法被調用之間的時間段;
在前臺生存期內,Activity 處于運行狀態,位于屏幕上其他所有 Activity 之上,能與用戶進行交互。
在這里重點需要關注的問題應該是Activity切換時的操作順序。
(A)onPause→(B)onCreate→(B)onStart→(B)onResume→(A)onStop(正解)
(A)onPause→(A)onStop→(B)onCreate→(B)onStart→(B)onResume(錯誤)
(1)一個Activity或多或少會占有系統資源,而在官方的建議中,onPause方法將會釋放掉很多系統資源,為切換Activity提供流暢性的保障,而不需要再等多兩個階段,這樣做切換更快。
(2)按照生命周期圖的表示,如果用戶在切換Activity的過程中再次切回原Activity,是在onPause方法后直接調用onResume方法的,這樣比onPause→onStop→onRestart→onStart→onResume要快得多。
舉個例子來幫助記憶,當我們編輯完短信內容還沒有發送,然后切換到桌面,這時短信內容并沒有被銷毀。
我們可以借助官方文檔的代碼,寫一個demo幫助記憶。
我們只需重寫代碼即可,參考log,即可更清楚的了解運行周期(qqun:823938389)