Activity生命周期、啟動(dòng)模式和隱式啟動(dòng)總結(jié)

AMS系列:
1奠宜、本文Activity生命周期包颁、啟動(dòng)模式和隱式啟動(dòng)總結(jié)
2、ActivityManagerService啟動(dòng)分析
3压真、ActivityMnagerService分析之啟動(dòng)一個(gè)Acitvity流程分析

前言:本文為activity相關(guān)知識做一個(gè)總結(jié)娩嚼。

一、生命周期

過程:

啟動(dòng):onCreate -> onStart -> onResume
退出:onPause -> onStop -> onDestroy
后臺:onPause -> onStop
返回:onRestart -> onStart -> onResume
異常情況:
onSaveInstanceState -> onStop -> onDestroy 和onPause無時(shí)序關(guān)系
onCreate -> onStart -> onRestoreInstanceState 和onResume無時(shí)序關(guān)系

onStart & onStop 與 onResume & onDestroy區(qū)別:

onStart & onStop:表示activity是否可見
onResume & onPause:表示activity是否位于前臺

耗時(shí)操作

A啟動(dòng)B,A必須先onPause滴肿,B才可onResume岳悟。所以onPause不要執(zhí)行重量級操作(耗時(shí)操作),應(yīng)把重量級操作放到onStop中泼差。

configChanges

即:AndroidMainifest.xml中activity的android:configChanges屬性贵少,Activity中onConfigurationChanged監(jiān)聽和屎。
常用項(xiàng):
locale:本地設(shè)置改變,一般指語言
orientation:屏幕方向
keyboardHidden:鍵盤的彈出隱藏
特殊屬性:screenSize & smallestScreenSize和編譯選項(xiàng)相關(guān)和運(yùn)行環(huán)境無關(guān)
屏蔽屏幕旋轉(zhuǎn):
配置android:configChanges="orientation|screenSize"(當(dāng)API>13需screenSize)

二春瞬、LaunchMode(啟動(dòng)模式)

種類

1柴信、standard,標(biāo)準(zhǔn)模式:

系統(tǒng)默認(rèn)模式,創(chuàng)建一個(gè)新的實(shí)例宽气。A通過standard啟動(dòng)B随常,B位于A的棧中。
applicationContext沒有任務(wù)棧萄涯,applicationContext不可以standard啟動(dòng)activity绪氛。

2、singleTop,棧頂復(fù)用模式

棧中無實(shí)例涝影,則創(chuàng)建一個(gè)實(shí)例枣察。
棧頂有實(shí)例,則復(fù)用燃逻。
e.g:
棧中有ABC序目,singleTop啟動(dòng)D,結(jié)果ABCD
棧中ABCD伯襟,singleTop啟動(dòng)D猿涨,結(jié)果ABCD
棧中ADBC,standard啟動(dòng)D,結(jié)果ADBCD

3姆怪、singleTask,棧中復(fù)用模式

棧中無實(shí)例叛赚,則創(chuàng)建一個(gè)實(shí)例。
棧中有實(shí)例稽揭,則復(fù)用俺附,默認(rèn)屬性clearTop
e.g:
棧中有ABC,singleTask啟動(dòng)D溪掀,結(jié)果ABCD
棧中ADBC,standard啟動(dòng)D事镣,結(jié)果AD,默認(rèn)clearTop

4、singleInstance,單實(shí)例模式

singleTask加強(qiáng)版膨桥,以singleInstance啟動(dòng)A蛮浑,創(chuàng)建一個(gè)新的任務(wù)棧,A位于此棧中只嚣。若再次以singleInstance啟動(dòng)A沮稚,不會(huì)再去創(chuàng)建,直接復(fù)用册舞。除非棧被系統(tǒng)銷毀蕴掏。

指定啟動(dòng)模式

AndroidMainifest,activity中android:launchMode="singleTask" 或者

Intent mIntent = new Intent();
mIntent.setClass(MainActivity.class,SecondAcitvity.class);
mIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(mIntent);

第二種優(yōu)先級高,同時(shí)存在遵循第二種。
模式:standard,singleTop,singleTask,singleInstance
Flags:FLAG_ACTIVITY_NEW_TASK盛杰,F(xiàn)LAG_ACTIVITY_SINGLE_TOP挽荡,F(xiàn)LAG_ACTIVITY_CLEAR_TOP
flag意如其名,flag還有其它很多即供,就不一一闡述定拟,這里說下FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS,指定后不會(huì)出現(xiàn)在歷史activity列表中逗嫡。

三青自、隱式啟動(dòng)Activity,intentFilter匹配規(guī)則

啟動(dòng)activity分為兩種驱证,顯式啟動(dòng)和隱式啟動(dòng)延窜。顯式:明確指出被調(diào)用activity的包名類名,隱式調(diào)用不需要明確信息抹锄。顯式和隱式原則上是不共存的逆瑞,如果共存以顯示為主。隱式啟動(dòng)匹配信息在AndroidManifest的activity中的<intent-filter>伙单,三種過濾信息:action获高,category,data车份。三個(gè)信息可同時(shí)存在多個(gè)谋减。intent-filter也可同時(shí)存在多個(gè),匹配其中一組intent-filter的三種信息各一種即可扫沼。

匹配規(guī)則

action

區(qū)分大小寫,action系統(tǒng)有自定義一些庄吼,action匹配字符串必須一樣缎除。若intentFilter定義了action屬性,隱式啟動(dòng)至少匹配其中一個(gè)总寻。

category

Intent未指定category時(shí)器罐,系統(tǒng)會(huì)默認(rèn)給Intent增加category屬性:<category android:name="android.intent.category.DEFAULT" ,所以如果你隱式啟動(dòng)activity且不想指定category在AndroidManifest總定義隱式啟動(dòng)時(shí)渐行,需加上<category android:name="android.intent.category.DEFAULT"轰坊。
Intent指定category,指定一個(gè)必須正確匹配一個(gè)祟印,多個(gè)必須正確匹配多個(gè)肴沫。

data

intentFilter配置data,Intent隱式啟動(dòng)必須匹配至少一個(gè)蕴忆,和action類似
先介紹一種結(jié)構(gòu) URI:

<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]
例如
content://com.example.test:100/folder/subfolder/test
http://www.baidu.com:80/search/info

data的所有匹配屬性如下:

<data   
     android:mimeType="string"  
     android:scheme="string"  
     android:host="string"  
     android:port="string"  
     android:path="string"  
     android:pathPrefix="string"  
     android:pathPattern="string"/> 

主要分為兩種颤芬,一種是mimeType,一種是URI中的其中任何之一屬性。
屬性簡介:
mimeType:媒體類型,image/jpeg,image/png,image/* 站蝠、video/等等
Scheme:URI模式汰具,http、file菱魔、content等留荔,URI無此參數(shù)URI無效
Host:URI主機(jī)名,www.baidu.com等澜倦,URI無此參數(shù)URI無效
Port:URI中端口號
Path/PathPrefix/PathPattern:路徑信息聚蝶,path和pathPattern表示完整的路徑信息,pahPatten可包含通配符"
",PathPrefix路徑的前綴信息肥隆。
設(shè)置方法三種:

mIntent.setType(mType)
mIntent.setData(mUri)
mIntent.setDataAndType(mUri,mType)

若先setType再setData既荚,mimeType會(huì)被清空
若先setData再setType,data會(huì)被清空
原因看源碼,setType和seData類似

public Intent setData(Uri data) {
        mData = data;
        mType = null;
        return this;
    }

如下兩種屬性同時(shí)使用栋艳,標(biāo)明這是一個(gè)入口activity恰聘,并且會(huì)出現(xiàn)在系統(tǒng)應(yīng)用列表中

<action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吸占,隨后出現(xiàn)的幾起案子晴叨,更是在濱河造成了極大的恐慌,老刑警劉巖矾屯,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兼蕊,死亡現(xiàn)場離奇詭異,居然都是意外死亡件蚕,警方通過查閱死者的電腦和手機(jī)孙技,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來排作,“玉大人牵啦,你說我怎么就攤上這事⊥荆” “怎么了哈雏?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長衫生。 經(jīng)常有香客問我裳瘪,道長,這世上最難降的妖魔是什么罪针? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任彭羹,我火速辦了婚禮,結(jié)果婚禮上站故,老公的妹妹穿的比我還像新娘皆怕。我一直安慰自己毅舆,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布愈腾。 她就那樣靜靜地躺著憋活,像睡著了一般。 火紅的嫁衣襯著肌膚如雪虱黄。 梳的紋絲不亂的頭發(fā)上悦即,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機(jī)與錄音橱乱,去河邊找鬼辜梳。 笑死,一個(gè)胖子當(dāng)著我的面吹牛泳叠,可吹牛的內(nèi)容都是我干的作瞄。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼危纫,長吁一口氣:“原來是場噩夢啊……” “哼宗挥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起种蝶,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤契耿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后螃征,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搪桂,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年盯滚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了踢械。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,865評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡魄藕,死狀恐怖裸燎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情泼疑,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布荷荤,位于F島的核電站退渗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蕴纳。R本人自食惡果不足惜会油,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望古毛。 院中可真熱鬧翻翩,春花似錦都许、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至桨仿,卻和暖如春睛低,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背服傍。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工钱雷, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人吹零。 一個(gè)月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓罩抗,卻偏偏與公主長得像,于是被迫代替她去往敵國和親灿椅。 傳聞我的和親對象是個(gè)殘疾皇子套蒂,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容