androidactivity生命
Ⅰ 如何理解Android中Activity的三個「生命周期」
下圖是官方文檔里的Activity生命周期圖,其中彩色標出的四個框是Activity的四種狀態,當Activity的狀態改變時會觸發一個或多個onXXX()方法。
onCreate()
當Acitivity第一次被創建時觸發,一般在這里要做的事情包括創建視圖(setContentView())、向視圖填充必要的數據等等。
onRestart()
這個我比較少用到,按文檔上的介紹,如果Activity之前被stop過,那麼下一次onStart()方法之前會先觸發這個方法。
onStart()
只要Activity從不可見變成可見,就會觸發到這個方法,但被AlertDialog遮擋/顯示的情況不算在內。
onResume()
當Activity來到最上層的時候,也就是開始與用戶直接交互時,觸發這個方法。例如本來Activity被一個AlertDialog遮擋,當這個AlertDialog消失時,onResume()方法就被觸發。
onPause()
和onResume()的觸發條件剛好相反,如果Activity本來在最上層,當它要讓出最上層的位置時會觸發這個方法。onPause()和onResume()是被觸發最頻繁的兩個方法,所以在這里不應該執行過於消耗資源的方法。
onStop()
當有其他Activity覆蓋了當前Activity時,不論另一個Activity是新開始的還是從下層移至最上層的,當前Activity的onStop()方法都會被觸發。
onDestroy()
Activity生命周期的終點。有兩種情況會導致它被觸發:1)執行了Activity#finish()方法;2)Android系統由於資源不足等原因決定殺掉Activity所在進程。通過isFinishing()方法可以判斷出是哪種情況。在這個方法里,我們一般要做的事情是釋放Activity佔有的資源,例如後台正在進行的下載線程等等。
最後,舉個實際例子來說明,假設你有一個「首頁Activity」和一個「編輯頁Activity」。
•當用戶點擊首頁里的「開始編輯」按鈕時,首頁的onPause()->onStart()onStop()依次觸發,編輯頁的onCreate()->onStart()->onResume()依次觸發;(感謝James.H.Fu指出的錯誤)
•當用戶在編輯頁按下「返回」按鈕時,編輯頁的onPause()->onStop()依次觸發,之後首頁的onStart() -> onResume()依次觸發;
•這時用戶在首頁按下「返回」按鈕,首頁的onPause()->onStop()->onDestroy()依次觸發。
Ⅱ android寮鍙戜腑鐨凙ctivity鐢熷懡鍛ㄦ湡鏄浠涔淇濆瓨activity鐨勪竴浜涗俊鎮鍦ㄥ摢涓鐢熷懡鍛ㄦ湡鏂規硶涓
銆愮瓟妗堛戱細鍏辨湁涓冧釜鍛ㄦ湡鍑芥暟錛
void onCreate(Bundle savedInstanceState) 絎涓嬈″壋寤烘椂璋冪敤
void onStart() 琚鐢ㄦ埛鍙瑙佹椂璋冪敤
void onRestart() 褰揂ctivity澶勪簬stop鐘舵佸張琚閲嶆柊鍚鍔ㄦ椂璋冪敤
void onResume() 褰撹幏寰楃劍鐐瑰嵆鍙涓庣敤鎴蜂氦浜掓椂璋冪敤
void onPause() 褰撳け鍘葷劍鐐規椂璋冪敤
void onStop() 褰撲笉鍙瑙佹椂璋冪敤
void onDestroy() 褰撻攢姣佹椂璋冪敤
Ⅲ Android中,activity生命周期是指什麼
一個Android應用程序在運行時,對於底層的Linux Kernel而言都是一個單獨的進程,但是對於Android系統而言,因為局限於手機畫面的大小與使用的考慮,不能把每一個運行中的應用程序窗口都顯示出來。
所以通常手機系統的界面一次僅顯示一個應用程序窗口,Android使用了Activity的概念來表示界面。
運行中的應用程序分為五大類,分別是:
前景模式:foreground process
可見模式:visible process
背景模式:background process
空白模式:empty process
服務模式:service process
除了最後一個,貌似service process是Service的事情了。其他都與Activity相關。
Android系統會判斷應用程序Activity是屬於哪一個類,給予不同的Activity生命周期。
Activity的生命周期也是它所在進程的生命周期。
Activity生命周期的運行如圖:
Activity生命周期的每一個階段都表示為金字塔上的一個台階,當系統創建一個新的activity時,每一個回調函數都把activity的狀態網上挪一步。
金子塔的最頂層就是activity運行在前景模式下,用戶可與之交互。
當用戶離開activity時,系統調用另一些回調函數,將activity的狀態從金字塔中一步一步移下來。有些情況下,activity只移動一部分,並沒有完全到底,這些情況下仍然可以移動回頂部。
注意這些狀態中只有三個狀態是靜態(static)的,意味著activity只有在這三個狀態下能停留一段時間:
Resumed:foreground,用戶可交互running state
Paused:部分被遮擋,不能接收用戶輸入也不能執行代碼,另一個半透明或者小的activity正擋在前面。
Stopped:activity完全被遮擋,不能被用戶看到,activity被認為在background,當Stopped的時候,activity實例的狀態信息被保留,但是不能執行任何代碼。
其他狀態都是轉換狀態,系統會很快調用其他相應的回調函數離開這些狀態。比如系統調用onCreate()之後,會很快調用onStart(),之後是onResume()。
相信不少朋友也已經看了以上的分析之後,也基本了解了Activity生命周期的幾個過程,我們就來說一說這幾個過程。
1.啟動Activity:系統會先調用onCreate方法,然後調用onStart方法,最後調用onResume,Activity進入運行狀態。
2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。
3.當前Activity由被覆蓋狀態回到前台或解鎖屏:系統會調用onResume方法,再次進入運行狀態。
4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居後台:系統會先調用onPause方法,然後調用onStop方法,進入停滯狀態。
5.用戶後退回到此Activity:系統會先調用onRestart方法,然後調用onStart方法,最後調用onResume方法,再次進入運行狀態。
6.當前Activity處於被覆蓋狀態或者後台不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而後用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。
7.用戶退出當前Activity:系統先調用onPause方法,然後調用onStop方法,最後調用onDestory方法,結束當前Activity。
有關於Activity的生命周期是Android中最基礎和最重要的知識,如果你想系統的了解一下Activity的生命周期,推薦你可以去一個叫做秒秒學的教程網站上看看。