一胁勺、Activity的基本概念:
Activity是Android的四大組件之一世澜,Activity是一個(gè)應(yīng)用組件,用戶可與其提供的屏幕進(jìn)行交互署穗,以執(zhí)行撥打電話寥裂、拍攝照片、發(fā)送電子郵件或查看地圖等操作案疲。 每個(gè) Activity 都會(huì)獲得一個(gè)用于繪制其用戶界面的窗口封恰。窗口通常會(huì)充滿屏幕,但也可小于屏幕并浮動(dòng)在其他窗口之上褐啡。一個(gè)應(yīng)用通常由多個(gè)彼此松散聯(lián)系的 Activity 組成诺舔。
二、Activity的生命周期:
2.1 onCreate():表示Activity正在被創(chuàng)建备畦,這是Activity生命周期的第一個(gè)方法低飒。可以做一些初始化的工作(加載布局資源懂盐、初始化所需要的數(shù)據(jù)等)褥赊,但是不要做耗時(shí)的工作。
2.2 onStart():Activity在屏幕上由不可見(jiàn)變?yōu)榭梢?jiàn)的時(shí)候該方法被調(diào)用莉恼。這時(shí)界面是不可交互的拌喉。
2.3 onResume():表明Activity已經(jīng)創(chuàng)建完成,并且可以開(kāi)始活動(dòng)了俐银,這個(gè)時(shí)候用戶已經(jīng)可以看到界面了尿背,并且即將與用戶交互。
2.4 onPause():在Activity處于可見(jiàn)但不可見(jiàn)交互時(shí)候該方法被調(diào)用悉患〔屑遥可以在這個(gè)方法中將一些消耗CPU的資源釋放掉,以及保存活動(dòng)狀態(tài)售躁。
2.5 onStop():表示Activity即將停止坞淮,可以做一些稍微重量級(jí)的回收工作,同樣也不能太耗時(shí)陪捷。
2.6 onRestart():表示Activity正在重新啟動(dòng)回窘。一般情況下,在Activity從不可見(jiàn)重新變?yōu)榭梢?jiàn)的狀態(tài)時(shí)onRestart就會(huì)被調(diào)用市袖。這種情形通常是由于用戶的行為所導(dǎo)致的啡直,比如用戶按下Home鍵切換到桌面或者打開(kāi)了一個(gè)新的Activity(這時(shí)當(dāng)前Activity會(huì)暫停烁涌,也就是onPause和onStop被執(zhí)行),接著用戶又回到了這個(gè)Activity酒觅,就會(huì)調(diào)用onRestart()撮执。
2.7 onDestroy():表示Activity即將被銷毀,這是Activity生命周期的最后一個(gè)回調(diào)舷丹,可以做一些回收工作和資源釋放抒钱。
2.8生命周期順序如圖:
2.8.1 各種情況下執(zhí)行生命周期的情況:
當(dāng)啟動(dòng)OneActivity執(zhí)行生命周期的情況:第一次啟動(dòng)的時(shí)候,會(huì)依次執(zhí)行onCreate()–>onStart()–>onResume()
關(guān)閉OneActivity時(shí)情況:關(guān)閉OneActivity颜凯,依次執(zhí)行onPause()–>onStop()–>onDestroy()
在OneActivity界面中按home鍵谋币,然后在進(jìn)入OneActivity時(shí)執(zhí)行生命周期情況:onPause()–>onStop() –>onRestart()–>onStart()–>onResume()
從OneActivity啟動(dòng)TwoActivity執(zhí)行情況:OneActivity的onPause()–>然后執(zhí)行TwoActivity的onCreate()–>onStart()–>onResume()–>最后再執(zhí)行OneActivity的onStop()
從TwoActivity中返回到OneActivity時(shí)執(zhí)行情況:執(zhí)行TwoActivity的onPause()–>然后執(zhí)行OneActivity的onRestart()–>onStart()–>onResume()–>再執(zhí)行TwoActivity的onStop()–>onDestroy()
橫豎屏切換的情況:onSaveInstance()–>onStop()–>onDestroy()–>onCreate()–>onStart()–>onRestoreInstance()–>onResume()
三、Activity生命周期的四種狀態(tài):
3.1 運(yùn)行狀態(tài):當(dāng)Activity位于任務(wù)棧的棧頂時(shí)症概,則Activity處于運(yùn)行狀態(tài)蕾额。
3.2 暫停狀態(tài):當(dāng)Activity不再處于棧頂位置,但依然可見(jiàn)時(shí)彼城,則Activity就進(jìn)入了暫停狀態(tài)诅蝶。
3.3 停止?fàn)顟B(tài):當(dāng)Activity不再處于棧頂位置,并且完全不可見(jiàn)的時(shí)候精肃,這時(shí)Activity就進(jìn)入了停止?fàn)顟B(tài)秤涩。
3.4 銷毀狀態(tài):當(dāng)Activity從任務(wù)棧中移除后就變成了銷毀狀態(tài)帜乞。
四司抱、Activity的4種啟動(dòng)方式:
4.1 standard標(biāo)準(zhǔn)模式
Activity的默認(rèn)啟動(dòng)模式,在standard模式下黎烈,每當(dāng)啟動(dòng)一個(gè)新的Activity习柠,它就會(huì)進(jìn)入任務(wù)棧,并處于棧頂?shù)奈恢谜掌澹瑢?duì)于使用standard模式的Activity资溃,系統(tǒng)不會(huì)判斷該Activity在棧中是否存在,每次啟動(dòng)都會(huì)創(chuàng)建一個(gè)新的實(shí)例烈炭。
4.2 singleTop啟動(dòng)模式
singleTop啟動(dòng)模式與standard類似溶锭,不同的是,當(dāng)啟動(dòng)的Activity已經(jīng)位于棧頂時(shí)符隙,則直接使用它不創(chuàng)建新的實(shí)例趴捅。如果啟動(dòng)的Activity沒(méi)有位于棧頂時(shí),則創(chuàng)建一個(gè)新的實(shí)例位于棧頂霹疫。
4.3 singleTask模式
指定此模式拱绑,該Activity只存在一個(gè)實(shí)例。每次啟動(dòng)該Activity時(shí)丽蝎,系統(tǒng)首先會(huì)檢查棧中是否存在該活動(dòng)的實(shí)例猎拨,如果發(fā)現(xiàn)已經(jīng)存在則直接使用該實(shí)例,并將當(dāng)前Activity之上的所有Activity出棧,如果沒(méi)有發(fā)現(xiàn)則創(chuàng)建一個(gè)新的實(shí)例红省。
4.4 singleInstance模式
Activity在整個(gè)系統(tǒng)中只有一個(gè)實(shí)例额各,不同上述三種模式,此模式的Activity會(huì)啟動(dòng)一個(gè)新的任務(wù)棧來(lái)管理這個(gè)Activity吧恃。
singleInstance模式加載Activity時(shí)臊泰,無(wú)論從哪個(gè)任務(wù)棧中啟動(dòng)該Activity,只會(huì)創(chuàng)建一個(gè)Activity實(shí)例蚜枢,并且會(huì)使用一個(gè)全新的任務(wù)棧來(lái)裝載該Activity實(shí)例缸逃。采用這種模式啟動(dòng)Activity會(huì)分為以下兩種情況,具體如下:
第一種:如果要啟動(dòng)的Activity不存在厂抽,系統(tǒng)會(huì)先創(chuàng)建一個(gè)新的任務(wù)棧需频,再創(chuàng)建該Activity的實(shí)例,并把該Activity加入棧頂筷凤。
第二種:如果要啟動(dòng)的Activity已經(jīng)存在昭殉,無(wú)論位于哪個(gè)應(yīng)用程序或者哪個(gè)任務(wù)棧中。系統(tǒng)都會(huì)把該Activity所在的任務(wù)棧轉(zhuǎn)到前臺(tái)藐守,從而使該Activity顯示出來(lái)挪丢。