1.1 Activity的生命周期全面分析
典型情況下的生命周期,是指在有用戶參與的情況下蝠猬,Activity所經(jīng)過(guò)的生命周期的改變;異常情況下的生命周期是指Activity被系統(tǒng)回收或者由于當(dāng)前當(dāng)前設(shè)備的Configuration發(fā)生改變從而導(dǎo)致Activity被銷毀重建。
1.1.1 典型情況下的生命周期分析
onCreate:表示Activity正在被創(chuàng)建辆雾,可以做一些初始化的工作万伤。
onRestart:表示Activity正在重新啟動(dòng)窒悔。當(dāng)用戶Home之后再重新打開(kāi)Activity就會(huì)回調(diào)此方法。
onStart:Activity正在被啟動(dòng)敌买,已經(jīng)可見(jiàn)了简珠,但是不可交互,還沒(méi)有到前臺(tái)。
onResume:Activity已經(jīng)顯示在前臺(tái)聋庵,并且可以與用戶交互膘融。
onPause:Activity暫停了,已經(jīng)不能和用戶交互祭玉。盡量不要在此方法做耗時(shí)操作氧映,否則會(huì)出現(xiàn)卡頓的現(xiàn)象(因?yàn)閱?dòng)其它Activity的時(shí)候,會(huì)先調(diào)用此方法)
onStop:Activity停止了脱货,可以在此方法做一些回收工作岛都。
onDestroy:Activity被銷毀,在此方法中做一些釋放工作振峻,釋放Activity所占用的資源臼疫。
1.1.2 異常情況下的生命周期分析
情況1,資源相關(guān)的系統(tǒng)配置發(fā)生改變導(dǎo)致Activity被殺死并重新創(chuàng)建(如橫豎屏切換)
Activity在異常情況下終止會(huì)調(diào)用onSaveInstanceState來(lái)保存當(dāng)前Activity的視圖結(jié)構(gòu)铺韧,當(dāng)Activity重新創(chuàng)建的時(shí)候多矮,系統(tǒng)會(huì)調(diào)用onRestoreInstanceState來(lái)恢復(fù)Activity的狀態(tài)。
情況2哈打,資源不足導(dǎo)致低優(yōu)先級(jí)的Activity被殺死
Activity的優(yōu)先級(jí)高低:前臺(tái)Activity->可見(jiàn)但并非前臺(tái)Activity->后臺(tái)Activity
1.2 Activity的啟動(dòng)模式
1.2.1 Activity的LaunchMode
standard:標(biāo)準(zhǔn)模式
singleTop:棧頂復(fù)用模式
singleTask:棧內(nèi)復(fù)用模式
singleInstance:?jiǎn)螌?shí)例模式
TaskAffinity標(biāo)記了一個(gè)Activity所需的任務(wù)棧的名字塔逃,默認(rèn)情況下所有Activity所需的任務(wù)棧的名字為應(yīng)用的包名。
allowTaskReparenting標(biāo)記是否允許轉(zhuǎn)移任務(wù)棧料仗,當(dāng)主應(yīng)用啟動(dòng)時(shí)湾盗,之前標(biāo)記過(guò)的Activity會(huì)回到主應(yīng)用的任務(wù)棧里面,并展示立轧。
adb shell dumpsys activity命令:查看當(dāng)前任務(wù)棧情況
1.2.2 Activity的Flags
FLAG_ACTIVITY_NEW_TASK:SingleTask
FLAG_ACTIVITY_SINGLE_TOP:singleTop
FLAG_ACTIVITY_CLEAR_TOP:(如果之前是standard格粪,則出棧,并重新創(chuàng)建)
1.3 IntentFilter的匹配規(guī)則
action的匹配規(guī)則:
action的匹配要求Intent中的action存在且必須和過(guò)濾規(guī)則中的其中一個(gè)action相同氛改。
category的匹配規(guī)則:
它要求Intent中如果含有category帐萎,那么所有的category都必須和過(guò)濾規(guī)則中的其中一個(gè)caegory相同。
data的匹配規(guī)則:
data組成:mimeType和URI(mimeType指媒體類型胜卤,比如image/jpeg,audio/mpeg4-generic和video/*等)URI的結(jié)構(gòu)如下:
scheme://host:port/path|pathPrefix|pathPattern
例如:
content://com.example.project:200/folder/subfolder/ect
http://www.baidu.com:80/search/info
總結(jié):
1疆导,Activity A啟動(dòng)ActivityB,A的onPause先調(diào)用葛躏,B執(zhí)行onCreate澈段,onStart,onResume再執(zhí)行A的onStop方法舰攒。
2败富,隱式啟動(dòng)判斷方法:PackageManager的resolveActivity方法或者Intent的resolveActivity方法。