Activity的重要性,在Android的開(kāi)發(fā)當(dāng)中不言而喻,作為四大組件當(dāng)中,使用最為頻繁的組件,有必要對(duì)它進(jìn)行一個(gè)全方面的了解和認(rèn)識(shí),下面我們通過(guò)一系列的文章對(duì)Activity進(jìn)行一個(gè)全面的了解和分析。
Activity典型情況下的生命周期
所謂典型的生命周期,就是指在有用戶(hù)參與的情況下,Activity所經(jīng)過(guò)的生命周期的改變。
如圖:

1)onCreate:表示Activity正在被創(chuàng)建,這是生命周期的第一個(gè)方法。在這個(gè)方法中我們可以做一些初始化工作,比如調(diào)用:setContentView去加載界面布局資源,初始化Activity所需數(shù)據(jù)等。
2)onRestart:表示Activity正在重新啟動(dòng)。一般情況下,當(dāng)當(dāng)前Activity從不可見(jiàn)重新變?yōu)榭梢?jiàn)狀態(tài)時(shí),onRestart就會(huì)被調(diào)用。這種情形一般是用戶(hù)行為所導(dǎo)致的,比如用戶(hù)按Home鍵切換到桌面或者用戶(hù)打開(kāi)一個(gè)新的Activity,這是當(dāng)前的Activity就會(huì)暫停,也就是onPause和onStop被執(zhí)行。接著用戶(hù)又回到了這個(gè)Activity,就會(huì)出現(xiàn)這種情況。
3)onStart:表示Activity正在被啟動(dòng),即將開(kāi)始,這時(shí)Activity已經(jīng)可見(jiàn)了,但是還沒(méi)有出現(xiàn)在前臺(tái),還無(wú)法和用戶(hù)交互。這個(gè)時(shí)候其實(shí)可以理解為Activity已經(jīng)顯示出來(lái)了,但是我們還看不到。
4)onResume:表示Activity已經(jīng)可見(jiàn)了,并且出現(xiàn)在前臺(tái)并開(kāi)始活動(dòng)。要注意這個(gè)和onStart的對(duì)比,雖然onStart和onResume表示Activity都已經(jīng)可見(jiàn)了,但是onStart的時(shí)候Activity還在后臺(tái),onResume的時(shí)候Activity才顯示到前臺(tái)。
5)onPause:表示Activity正在停止,正常情況下onStop就會(huì)被調(diào)用,在特殊情況下,如果這個(gè)時(shí)候快速地回到當(dāng)前Activity,那么onResume會(huì)被調(diào)用。此時(shí)可以做一些存儲(chǔ)數(shù)據(jù),停止動(dòng)畫(huà)等工作,但是注意這里不能太耗時(shí),因?yàn)檫@會(huì)影響到新Activity的顯示,onPause必須執(zhí)行完,新Activity的onResume才會(huì)執(zhí)行。
6)onStop:表示Activity即將停止,可以做一些稍微重量級(jí)的回收工作,同樣不能太耗時(shí)。
7)onDestroy:表示Activity即將被銷(xiāo)毀,這是Activity生命周期中的最后一個(gè)回調(diào),在這里,我們可以做一些回收工作和最終的資源釋放。
正常情況下,Activity的常用生命周期就只有上面7個(gè)。
典型情況說(shuō)明:
1)針對(duì)一個(gè)特定的Activity,第一次啟動(dòng),回調(diào)如下:onCreate——》onStart——》onResume。
2)當(dāng)用戶(hù)打開(kāi)一個(gè)新的Activity或者切換到桌面的時(shí)候,回調(diào)如下:onPause——》onStop
這里面有一個(gè)種特殊情況,如果新Activity采用了透明主題,那么當(dāng)前Activity不會(huì)回調(diào)onStop
3)當(dāng)用戶(hù)再次回到原Activity時(shí),回調(diào)如下:OnRestart——》onStart——》onResume
4)當(dāng)用戶(hù)按back鍵回退時(shí),回調(diào)如下:onPause——》onStop——》onDestroy
5)當(dāng)Activity被系統(tǒng)回收后再次打開(kāi),生命周期方法回調(diào)過(guò)程和1)一樣
6)從整個(gè)Activity生命周期來(lái)說(shuō),onCreate和onDestroy是配對(duì)的,分別標(biāo)識(shí)著Activity的創(chuàng)建和銷(xiāo)毀,并且只可能調(diào)用一次。從Activity是否可見(jiàn)來(lái)說(shuō),onStart和onStop是配對(duì)的,隨著用戶(hù)的操作或者設(shè)備屏幕的點(diǎn)亮和熄滅,這兩個(gè)方法可能被調(diào)用多次;從Activity是否在前臺(tái)來(lái)說(shuō),onResume和onPause配對(duì)的,隨著用戶(hù)操作或者設(shè)備屏幕的點(diǎn)亮或者熄滅這兩個(gè)方法可能被調(diào)用多次。
onStart和onStop是從Activity是否可見(jiàn)這個(gè)角度來(lái)回調(diào),而onResume和onPause是從Activity是否位于前臺(tái)這個(gè)角度來(lái)回調(diào)的。
不能再onPause中做重量級(jí)的操作,因?yàn)楸仨歰nPause執(zhí)行完以后新Activity才能onResume。在onPause和onStop都不能執(zhí)行耗時(shí)操作,尤其是onPause。這也意味著,我們應(yīng)當(dāng)盡量在onStop中做操作,從而使得新Activity盡快顯示出來(lái)并切換到前臺(tái)。
####歡迎關(guān)注公共號(hào)
