成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Activity啟動(dòng)模式及應(yīng)用

YFan / 3559人閱讀

摘要:模式所有都在同一個(gè)棧中。啟動(dòng)時(shí),如果該實(shí)例已經(jīng)存在于棧頂,則復(fù)用該實(shí)例否則,生成一個(gè)新的實(shí)例。二重要的啟動(dòng)標(biāo)識(shí)通過代碼實(shí)現(xiàn)啟動(dòng)模式。聯(lián)合使用清空當(dāng)前棧。如果在發(fā)現(xiàn)登陸過期,需要重新登錄,并且登陸后需要重新進(jìn)入主頁面相當(dāng)于全部重新啟動(dòng)一遍。

一、Activity四種啟動(dòng)模式

這4種啟動(dòng)模式都是通過在manifest中注冊(cè)實(shí)現(xiàn)的。

standard模式:所有activity都在同一個(gè)task棧中。每次啟動(dòng)activity,都會(huì)生成一個(gè)新的activity實(shí)例。
singleTop模式:所有activity都在同一個(gè)task棧中。啟動(dòng)activity時(shí),如果該activity實(shí)例已經(jīng)存在于棧頂,則復(fù)用該activity實(shí)例;否則,生成一個(gè)新的activity實(shí)例。
singleTask模式:所有activity都在同一個(gè)task棧中。啟動(dòng)activity時(shí),如果該activity實(shí)例已經(jīng)存在于棧中,則復(fù)用該activity實(shí)例,同時(shí)彈出該activity上面的所有實(shí)例;否則,生成一個(gè)新的activity實(shí)例。
singleInstance模式:會(huì)在一個(gè)新的task棧中啟動(dòng)該activity實(shí)例,且這個(gè)棧中有且只能有這一個(gè)activity實(shí)例。

二、Activity重要的啟動(dòng)標(biāo)識(shí)

通過代碼實(shí)現(xiàn)啟動(dòng)模式。

Intent intent = new Intent();
intent.setClass(context, DemoActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intent);

Intent.FLAG_ACTIVITY_NEW_TASK:在一個(gè)新的task棧中啟動(dòng)activity,但是并不是一定會(huì)在一個(gè)新的task棧中啟動(dòng)activity。如果系統(tǒng)為該activity找到一個(gè)極具親和力(taskAffinity的值相等)的task棧,就不會(huì)在新的task棧中啟動(dòng)Activity。
Intent.FLAG_ACTIVITY_CLEAR_TOP:清空當(dāng)前task棧中,該activity之上的所有activity實(shí)例,當(dāng)前activity是否會(huì)重新onCreate,取決于是否與Intent.FLAG_ACTIVITY_SINGLE_TOP標(biāo)記連用。
Intent.FLAG_ACTIVITY_SINGLE_TOP:只用Intent.FLAG_ACTIVITY_CLEAR_TOP當(dāng)前Activity會(huì)重新onCreate,Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP組合使用,當(dāng)前Activity不會(huì)重新onCreate。
Intent.FLAG_ACTIVITY_CLEAR_TASK:清空當(dāng)前task棧中,所有activity實(shí)例。
Intent.FLAG_ACTIVITY_CLEAR_TASK+Intent.FLAG_ACTIVITY_NEW_TASK聯(lián)合使用:清空當(dāng)前task棧。然后在一個(gè)新的task棧中啟動(dòng)activity,但是并不是一定會(huì)在一個(gè)新的task棧中啟動(dòng)activity。如果系統(tǒng)為該activity找到一個(gè)極具親和力(taskAffinity的值相等)的task棧,就不會(huì)在新的task棧中啟動(dòng)Activity。
Intent.FLAG_ACTIVITY_CLEAR_TOP+Intent.FLAG_ACTIVITY_NEW_TASK聯(lián)合使用:清空當(dāng)前task棧中,該activity之上的所有activity實(shí)例。然后在一個(gè)新的task棧中啟動(dòng)activity,但是并不是一定會(huì)在一個(gè)新的task棧中啟動(dòng)activity。如果系統(tǒng)為該activity找到一個(gè)極具親和力(taskAffinity的值相等)的task棧,就不會(huì)在新的task棧中啟動(dòng)Activity。

三、task棧與task棧之間的關(guān)系

假如有3個(gè)task棧,task1中包含activity1,task2中包含activity2,task3中包含activity3和activity4,假如task1、task2、task3的位置關(guān)系是,task3位于頂部。
只有最上層task棧中的activity有啟動(dòng)別的activity的權(quán)限:上述例子中,activity3和activity4可以啟動(dòng)別的activity,activity1和activity2無法啟動(dòng)別的activity。
頂層activity所在棧一定位于頂部:上述例子中,假如activity3啟動(dòng)了activity1,那么task1將被提到頂部。activity1可以啟動(dòng)別的activity,activity2、activity3和activity4無法啟動(dòng)別的activity。

四、taskAffinity屬性

taskAffinity用于標(biāo)記當(dāng)前activity應(yīng)該屬于哪個(gè)task棧:如果activity沒有指定taskAffinity的值,那么就等于application的taskAffinity的值,如果application也沒有指定,那么taskAffinity的值就等于包名。
默認(rèn)情況下,Intent.FLAG_ACTIVITY_NEW_TASK不會(huì)在新的task棧中啟動(dòng)activity:因?yàn)槟苷业揭粋€(gè)極具親和力的task棧,默認(rèn)情況下,activity的taskAffinity值都等于包名。
activity重新宿主:如果application1的activity1與application2的activity2的taskAffinity值相等,且application1的activity1的allowTaskReparenting設(shè)置為true。啟動(dòng)activity1后退到后臺(tái),再啟動(dòng)activity2時(shí),activity1會(huì)重新宿主,也就是說會(huì)先看到activity1。

五、應(yīng)用場(chǎng)景

LoginActivity->HomeActivity->ActivityA->ActivityB
假設(shè)從登陸頁面(登錄后頁面finish),跳轉(zhuǎn)到主頁面,再跳轉(zhuǎn)到ActivityA,再跳轉(zhuǎn)到ActivityB。如果在ActivityB發(fā)現(xiàn)登陸過期,需要重新登錄,并且登陸后需要重新進(jìn)入主頁面(相當(dāng)于全部重新啟動(dòng)一遍)。
方案一:可以把HomeActivity設(shè)置為singleTask。
方案二:可以使用Intent.FLAG_ACTIVITY_CLEAR_TASK。
方案三:可以使用Intent.FLAG_ACTIVITY_CLEAR_TOP。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/69039.html

相關(guān)文章

  • 金三銀四,2019大廠Android高級(jí)工程師面試題整理

    摘要:原文地址游客前言金三銀四,很多同學(xué)心里大概都準(zhǔn)備著年后找工作或者跳槽。最近有很多同學(xué)都在交流群里求大廠面試題。 最近整理了一波面試題,包括安卓JAVA方面的,目前大廠還是以安卓源碼,算法,以及數(shù)據(jù)結(jié)構(gòu)為主,有一些中小型公司也會(huì)問到混合開發(fā)的知識(shí),至于我為什么傾向于混合開發(fā),我的一句話就是走上編程之路,將來你要學(xué)不僅僅是這些,豐富自己方能與世接軌,做好全棧的裝備。 原文地址:游客kutd...

    tracymac7 評(píng)論0 收藏0
  • Android 2019最新面試實(shí)戰(zhàn)總結(jié)

    摘要:內(nèi)存泄漏當(dāng)應(yīng)用內(nèi)部不再需要某個(gè)實(shí)例后,但是這個(gè)對(duì)象卻仍然被引用,這個(gè)情況就叫做內(nèi)存泄露。安卓虛擬機(jī)為每一個(gè)應(yīng)用分配一定的內(nèi)存空間,當(dāng)內(nèi)存泄露到達(dá)一定的程度就會(huì)造成內(nèi)存溢出。點(diǎn)擊登錄跳轉(zhuǎn)頁面中所有操作都與用戶密切相關(guān),是 Android: 今日頭條屏幕適配的原理? 1:首先計(jì)算出 density,計(jì)算公式:當(dāng)前設(shè)備屏幕總寬度(單位為像素)/ 設(shè)計(jì)圖總寬度(單位為 dp) = densit...

    Caicloud 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<