一、初識Activity
在日常應用中Activity是與用戶交互的接口,它提供了一個用戶完成相關操作的窗口。當我們在開發(fā)中創(chuàng)建Activity后静檬,通過調(diào)用setContentView(View)方法來給該Activity指定一個布局界面,而這個界面就是提供給用戶交互的接口并级。Android系統(tǒng)中是通過Activity棧的方式來管理Activity的拂檩,而Activity自身則是通過生命周期的方法來管理的自己的創(chuàng)建與銷毀,既然如此嘲碧,現(xiàn)在我們就來看看Activity生命周期是如何運作的稻励。
二、Activity 的形態(tài)
Active/Running:
Activity處于活動狀態(tài)愈涩,此時Activity處于棧頂望抽,是可見狀態(tài),可與用戶進行交互钠署。
Paused:
當Activity失去焦點時,或被一個新的非全屏的Activity荒椭,或被一個透明的Activity放置在棧頂時谐鼎,Activity就轉化為Paused狀態(tài)。但我們需要明白趣惠,此時Activity只是失去了與用戶交互的能力狸棍,其所有的狀態(tài)信息及其成員變量都還存在,只有在系統(tǒng)內(nèi)存緊張的情況下味悄,才有可能被系統(tǒng)回收掉草戈。
Stopped:
當一個Activity被另一個Activity完全覆蓋時,被覆蓋的Activity就會進入Stopped狀態(tài)侍瑟,此時它不再可見唐片,但是跟Paused狀態(tài)一樣保持著其所有狀態(tài)信息及其成員變量。
Killed:
當Activity被系統(tǒng)回收掉時涨颜,Activity就處于Killed狀態(tài)费韭。
Activity會在以上四種形態(tài)中相互切換,至于如何切換庭瑰,這因用戶的操作不同而異星持。了解了Activity的4種形態(tài)后,我們就來聊聊Activity的生命周期弹灭。
三督暂、Activity 生命周期一覽
這里我們先來看看這一張經(jīng)典的生命周期流程圖:
所謂的典型的生命周期就是在有用戶參與的情況下,Activity經(jīng)歷從創(chuàng)建逻翁,運行饥努,停止,銷毀等正常的生命周期過程卢未。我們這里先來介紹一下幾個主要方法的調(diào)用時機肪凛,然后再通過代碼層面來驗證其調(diào)用流程。
onCreate: 該方法是在Activity被創(chuàng)建時回調(diào)辽社,它是生命周期第一個調(diào)用的方法伟墙,我們在創(chuàng)建Activity時一般都需要重寫該方法,然后在該方法中做一些初始化的操作滴铅,如通過setContentView設置界面布局的資源戳葵,初始化所需要的組件信息等。
onStart: 此方法被回調(diào)時表示Activity正在啟動汉匙,此時Activity已處于可見狀態(tài)拱烁,只是還沒有在前臺顯示,因此無法與用戶進行交互噩翠∠纷裕可以簡單理解為Activity已顯示而我們無法看見擺了。
onResume: 當此方法回調(diào)時伤锚,則說明Activity已在前臺可見擅笔,可與用戶交互了(處于前面所說的Active/Running形態(tài)),onResume方法與onStart的相同點是兩者都表示Activity可見屯援,只不過onStart回調(diào)時Activity還是后臺無法與用戶交互猛们,而onResume則已顯示在前臺,可與用戶交互狞洋。當然從流程圖弯淘,我們也可以看出當Activity停止后(onPause方法和onStop方法被調(diào)用),重新回到前臺時也會調(diào)用onResume方法吉懊,因此我們也可以在onResume方法中初始化一些資源庐橙,比如重新初始化在onPause或者onStop方法中釋放的資源。
onPause: 此方法被回調(diào)時則表示Activity正在停止(Paused形態(tài))借嗽,一般情況下onStop方法會緊接著被回調(diào)怕午。但通過流程圖我們還可以看到一種情況是onPause方法執(zhí)行后直接執(zhí)行了onResume方法,這屬于比較極端的現(xiàn)象了淹魄,這可能是用戶操作使當前Activity退居后臺后又迅速地再回到到當前的Activity郁惜,此時onResume方法就會被回調(diào)。當然,在onPause方法中我們可以做一些數(shù)據(jù)存儲或者動畫停止或者資源回收的操作兆蕉,但是不能太耗時羽戒,因為這可能會影響到新的Activity的顯示——onPause方法執(zhí)行完成后,新Activity的onResume方法才會被執(zhí)行虎韵。
onStop: 一般在onPause方法執(zhí)行完成直接執(zhí)行易稠,表示Activity即將停止或者完全被覆蓋(Stopped形態(tài)),此時Activity不可見包蓝,僅在后臺運行驶社。同樣地,在onStop方法可以做一些資源釋放的操作(不能太耗時)测萎。
onRestart:表示Activity正在重新啟動亡电,當Activity由不可見變?yōu)榭梢姞顟B(tài)時,該方法被回調(diào)硅瞧。這種情況一般是用戶打開了一個新的Activity時份乒,當前的Activity就會被暫停(onPause和onStop被執(zhí)行了),接著又回到當前Activity頁面時腕唧,onRestart方法就會被回調(diào)或辖。
onDestroy:此時Activity正在被銷毀,也是生命周期最后一個執(zhí)行的方法枣接,一般我們可以在此方法中做一些回收工作和最終的資源釋放颂暇。