Activity的launchMode和任务栈小结
對(duì)Activity的launchMode的理解一直沒(méi)有好好總結(jié)下,這兩天系統(tǒng)總結(jié)下launchMode的使用方法:
Activity的launchMode屬性決定了Activity和應(yīng)用程序當(dāng)前任務(wù)棧之間的關(guān)系。一個(gè)應(yīng)用程序當(dāng)前任務(wù)棧管理著應(yīng)用程序的activity集合的Activity歸屬和Activity間的交互。
開(kāi)發(fā)者想要開(kāi)發(fā)的App擁有良好的交互,因此,深入對(duì)Activity的launchMode的理解能幫助我們開(kāi)發(fā)性能良好和交互合理的App。
Activity的launchMode主要有四種類型:
- standard
- singleTop
- singleTask
- singleInstance
我們知道Activity的四種啟動(dòng)模式都是在配置文件manifest里配置,除此之外我們還能夠通過(guò)制定Intent的flag參數(shù)來(lái)改變Activity的默認(rèn)行為。也就是說(shuō),我們的Activity的默認(rèn)四種類型的表現(xiàn)形式。在我們啟動(dòng)該Activity前,我們指定Intent的flag參數(shù),我們能夠覆蓋Activity的默認(rèn)表現(xiàn)。Intent的改變默認(rèn)啟動(dòng)模式的常見(jiàn)參數(shù)有例如以下:
- FLAG_ACTIVITY_NEW_TASK
- FLAG_ACTIVITY_CLEAR_TOP
- FLAG_ACTIVITY_SINGLE_TOP
以下從Activity的launchMode表現(xiàn)的四種啟動(dòng)方式說(shuō)起:
1.standard
standard模式是默認(rèn)的啟動(dòng)模式。不用為Activity配置android:launchMode屬性就可以。也能夠顯示指定為standard。
啟動(dòng)standard模式的Activity時(shí)候,會(huì)在任務(wù)棧的棧頂加入一個(gè)新的實(shí)例化的Activity。
點(diǎn)擊返回鍵,Activity的退棧順序就依照任務(wù)棧先進(jìn)先出的結(jié)構(gòu)退棧。
2.singleTop
啟動(dòng)singleTop模式的Activity時(shí)候,系統(tǒng)會(huì)查找當(dāng)前任務(wù)棧棧頂元素是不是當(dāng)前要啟動(dòng)的Activity實(shí)例的類,假設(shè)不是,會(huì)實(shí)例化一個(gè)新的類加入到棧頂;假設(shè)是,當(dāng)前棧頂Activity會(huì)被復(fù)用。
點(diǎn)擊返回鍵,Activity的退棧順序就依照任務(wù)棧先進(jìn)先出的結(jié)構(gòu)退棧。
3.singleTop
啟動(dòng)singleTask模式的Activity時(shí)候,Activity會(huì)默認(rèn)開(kāi)啟一個(gè)新的任務(wù)棧。該Activity作為根元素。假設(shè)該Activity的實(shí)例已經(jīng)存在單獨(dú)的任務(wù)棧,系統(tǒng)會(huì)調(diào)用該Activity的onNewIntent()方法,保證該Activity僅僅會(huì)存在一個(gè)實(shí)例。關(guān)于singleTask的元素退棧分兩種情況:
-啟動(dòng)的Activity屬于本應(yīng)用程序Activity集合
首先定義Activity啟動(dòng)規(guī)則例如以下圖所看到的。
當(dāng)啟動(dòng)順序?yàn)锳->C->A->C,返回棧退棧操作為C->A->home界面,通過(guò)實(shí)際的樣例能夠說(shuō)明,當(dāng)一個(gè)任務(wù)棧里存在singleTask類型的實(shí)例。再啟動(dòng)該singleTask類型的Activity時(shí)候。在任務(wù)棧里該Activity實(shí)例上面的Activity都會(huì)清出任務(wù)棧,該Activity變成任務(wù)棧頂元素。
-啟動(dòng)的Activity不屬于本應(yīng)用程序應(yīng)用程序集合
當(dāng)啟動(dòng)的singleTask為另外的應(yīng)用程序的Activity,假設(shè)當(dāng)前后臺(tái)沒(méi)有任務(wù)棧存在該Activity的情況。就新建一個(gè)任務(wù)棧。該Activity為該任務(wù)棧的棧頂元素。一種特殊的情況。當(dāng)后臺(tái)剛好有一個(gè)任務(wù)棧存在改Activity的時(shí)候。此處該任務(wù)棧會(huì)被調(diào)到前臺(tái)。
假設(shè)此時(shí)按返回鍵的時(shí)候,回退的過(guò)程會(huì)是例如以下:
4.singleInstance
啟動(dòng)singleInstance與singleTask類似,僅僅是系統(tǒng)不會(huì)向聲明為singleInstance的任務(wù)棧加入其它的activity,通過(guò)該聲明為singleInstance的Activity實(shí)例啟動(dòng)其它的Activity。其它Activity必須加入到其它的任務(wù)棧。也就是說(shuō)聲明額外singleInstance的Activity所在任務(wù)棧僅僅有它一個(gè)元素。
以下說(shuō)下關(guān)于Intent的經(jīng)常使用flags系統(tǒng)常量:
FLAG_ACTIVITY_NEW_TASK
該常量的實(shí)際效果跟上面提到的singleTask的啟動(dòng)的Activity不屬于本應(yīng)用程序的Activity集合效果一樣。
FLAG_ACTIVITY_SINGLE_TOP
該常量實(shí)際效果跟singleTop效果一樣。
FLAG_ACTIVITY_CLEAR_TOP
該常量相當(dāng)于上面提到的singleTask的啟動(dòng)的Activity屬于本應(yīng)用程序的Activity集合效果一樣。
本文個(gè)人周末動(dòng)手實(shí)踐小結(jié)。可能會(huì)有理解偏差錯(cuò)誤的地方,歡迎大家指正,一起共同進(jìn)步。
轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/johnnyz1234/article/details/47209957
轉(zhuǎn)載于:https://www.cnblogs.com/jzssuanfa/p/7064224.html
總結(jié)
以上是生活随笔為你收集整理的Activity的launchMode和任务栈小结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: windows 打开和关闭显示器
- 下一篇: pt-find使用