www涩-www黄网站-www黄色-www黄色com-国产免费拍拍视频在线观看网站-国产免费怕怕免费视频观看

詳解Android Activity啟動(dòng)模式

2018-05-21 15:13:27 ImaginationTech  點(diǎn)擊量: 評(píng)論 (0)
Android Activity啟動(dòng)模式

相關(guān)的基本概念:

1、任務(wù)棧(Task)

若干個(gè)Activity的集合的棧表示一個(gè)Task。

棧不僅僅只包含自身程序的Activity,它也可以跨應(yīng)用包含其他應(yīng)用的Activity,這樣有利于保障用戶體驗(yàn),維護(hù)用戶操作體驗(yàn)上的完整性。

例如:微信ActivityA 分享文章到QQActivityB,兩個(gè)activity是存在于不同app中的,但是被系統(tǒng)放在一個(gè)任務(wù)中,分享后,用戶按back鍵返回,可以返回到原來(lái)的微信Activity A中,這就確保了用戶體驗(yàn)。

2、查看當(dāng)前系統(tǒng)的任務(wù)棧

命令行中 -- > adb shell dumpsys activity

3、Activity 的相關(guān)屬性

android:taskAffinity:是否定義了該屬性,對(duì)接下來(lái)討論到的singleTask影響甚大,如果設(shè)置了Activity的taskAffinity屬性值,Activity將在TaskName為指定值的獨(dú)立Task中啟動(dòng),否則,將在原來(lái)的默認(rèn)Task中。

android:allowTaskReparenting:主要作用是activity的遷移,程序A已經(jīng)啟動(dòng)了若干個(gè)Activity,其中包含Activity1(這個(gè)Activity1擁有該屬性),當(dāng)程序B也要啟動(dòng)它的時(shí)候,其可遷移到程序B內(nèi)。

android:alwaysRetainTaskState:操作系統(tǒng)會(huì)在程序長(zhǎng)時(shí)間不會(huì)動(dòng)的時(shí)候,清除Task狀態(tài),如果開(kāi)啟這個(gè),系統(tǒng)會(huì)繼續(xù)保持直到再次打開(kāi),只對(duì)根Activity生效(ABC,A是棧底,C是棧頂,只能對(duì)A即可)。例如微信在后臺(tái),當(dāng)我們?cè)俅未蜷_(kāi)應(yīng)用時(shí),系統(tǒng)會(huì)判斷是否已經(jīng)存在以A為根Activity的棧,如果有,直接使用該棧,并顯示棧頂?shù)腁ctivity。

android:clearTaskOnLaunch:用來(lái)標(biāo)記是否在啟動(dòng)該Activity時(shí),清除除根目錄的其他Activity

android:exported:是否支持其它應(yīng)用調(diào)用當(dāng)前組件。默認(rèn)值:包含有intent-filter 默認(rèn)值為true(); 沒(méi)有intent-filter默認(rèn)值為false。

四種啟動(dòng)模式:

standard:每次激活A(yù)ctivity時(shí)(startActivity),都創(chuàng)建Activity實(shí)例,并放入任務(wù)棧;

singleTop:如果該Activity位于任務(wù)棧棧頂,則不需要?jiǎng)?chuàng)建,復(fù)用實(shí)例并且會(huì)調(diào)用該實(shí)例的onNewIntent()方法將Intent對(duì)象傳遞到這個(gè)實(shí)例中,其余情況都要?jiǎng)?chuàng)建Activity實(shí)例;(singleTop模式,只在當(dāng)前任務(wù)棧中生效、startActivityForResult啟動(dòng)一個(gè)設(shè)置了singleTop的activity,singleTop模式將無(wú)效)

關(guān)于onNewIntent():

根據(jù)文檔知,當(dāng)Activity的啟動(dòng)模式是singleTop或者使用FLAG_ACTIVITY_SINGLE_TOP這個(gè)標(biāo)記啟動(dòng)新的Activity并且Activity棧頂就是待啟動(dòng)的Activity的時(shí)候,會(huì)調(diào)用原Activity的這個(gè)方法;例子:QActivity為棧頂復(fù)用模式,當(dāng)Qactivity位于棧頂時(shí),再次打開(kāi),onResume() -- >onPause() -- >onNewIntent() -- >onResume() 。當(dāng)Qactivity不位于棧頂時(shí),onNewIntent-- >onRestart-- >onStart-- >onResume(也就是說(shuō)只要棧頂不是Qactivity ,都會(huì)創(chuàng)建新的實(shí)例,是Qactivity則重用不新建)。

singleTask:使用好棧內(nèi)復(fù)用模式對(duì)taskAffinity屬性的理解很重要。

存在相同taskAffinity屬性值的Task:不存在實(shí)例,則新建Activity實(shí)例。如果存在則把當(dāng)前實(shí)例中復(fù)用實(shí)例, 這個(gè) Activity 啟動(dòng)并且清除頂部的 Acitivity ,通過(guò)標(biāo)識(shí) CLEAR_TOP。

taskAffinity屬性值不一樣的Task:在這個(gè) Task 中新建這個(gè) Activity 實(shí)例。

singleInstance:和singleTask差不多,唯一不同的是singleInstance Activity實(shí)例的Task只能存放一個(gè)該模式的Activity實(shí)例,例如Qactivity加載Wactivity都會(huì)被放入其它的Task中,如果存在與Wactivity相同affinity的Task,則在該Task內(nèi)創(chuàng)建Wactivity。如果不存在,則重新生成新的Task并入棧。

常用Intent Flags:

FLAG_ACTIVITY_NEW_TASK:如果task中已經(jīng)有了你要啟動(dòng)的activity的話,當(dāng)前task會(huì)被帶到前臺(tái)(不管這個(gè)activity是否在前臺(tái),有可能activity上邊還壓有別的activity)。如果配合FLAG_ACTIVITY_NEW_MULTI_TASK,則無(wú)論什么情況都會(huì)創(chuàng)建新的Task,就成了類似 singleInstance 的情況了。如果配合 FLAG_ACTIVITY_CLEAR_TASK,則會(huì)先清空該棧,然后向棧中添加目標(biāo)Activity,棧ID不變。

例如:Flag為FLAG_ACTIVITY_NEW_TASK,Qactivity(棧為L(zhǎng)OL)啟動(dòng)Wactivity(棧為DOTA),接著啟動(dòng)Eactivity(棧為DOTA),Home回桌面。打開(kāi)該應(yīng)用,Qactivity啟動(dòng)Wactivity,Eactvity會(huì)出現(xiàn)在前臺(tái),因?yàn)樗钦麎K棧啟動(dòng)(里面順序不變)。

FLAG_ACTIVITY_SINGLE_TOP:相當(dāng)于launchMode中的singleTop。

FLAG_ACTIVITY_CLEAR_TOP:與singleTask類似,但有極大區(qū)別,它會(huì)銷毀目標(biāo)Activity和它之上的所有Activity,重新創(chuàng)建目標(biāo)Activity,并沒(méi)有執(zhí)行onNewIntent()。

tips:指定啟動(dòng)模式時(shí),F(xiàn)lags的優(yōu)先級(jí)大于launchMode,當(dāng)兩者都有時(shí),以Intent Flag有效。

注意事項(xiàng):

1、當(dāng)目標(biāo)的啟動(dòng)模式不為標(biāo)準(zhǔn)模式時(shí),不要使用startActivityForResult去啟動(dòng)目標(biāo),容易出現(xiàn)你意想不到的結(jié)果。

例如:(大概意思,startActivityForResult相當(dāng)于白設(shè)置,會(huì)返回一個(gè)取消的結(jié)果)

2、當(dāng)Activity執(zhí)行了onDestroy,沒(méi)有執(zhí)行finish,那么實(shí)例都還是存在棧里的。但Activity被finish掉了,則它會(huì)是新建實(shí)例重新入棧,不會(huì)按啟動(dòng)模式想的那樣。

 

轉(zhuǎn)載自:http://www.cnblogs.com/wujiancheng/

大云網(wǎng)官方微信售電那點(diǎn)事兒

責(zé)任編輯:售電衡衡

免責(zé)聲明:本文僅代表作者個(gè)人觀點(diǎn),與本站無(wú)關(guān)。其原創(chuàng)性以及文中陳述文字和內(nèi)容未經(jīng)本站證實(shí),對(duì)本文以及其中全部或者部分內(nèi)容、文字的真實(shí)性、完整性、及時(shí)性本站不作任何保證或承諾,請(qǐng)讀者僅作參考,并請(qǐng)自行核實(shí)相關(guān)內(nèi)容。
我要收藏
個(gè)贊
?
主站蜘蛛池模板: 国产免费自拍 | 久久久久久极精品久久久 | 久久黄色片 | 国产精品成人网 | 亚洲天堂视频一区 | 欧美大尺度aaa级毛片 | 精品成人网 | 国产精品美乳免费看 | 韩国19禁主播裸免费福利 | 亚洲精品综合一区在线 | 成人午夜天 | 久久香蕉国产线看免费 | 国产成人亚洲精品老王 | 色视频在线观看视频 | 国产成人亚洲综合91精品555 | 久久成人免费观看全部免费 | 欧洲一级视频 | 18在线观看国内精品视频 | 精品欧美成人高清视频在线观看 | 女人一级特纯黄大片色 | 久久福利资源站免费观看i 久久高清精品 | 在线观看免费黄色网址 | 最新国产午夜精品视频成人 | 亚洲欧美日韩中文字幕在线 | 久久频这里精品99香蕉久 | 国产色在线观看 | 久久无码精品一区二区三区 | 日本三级网站在线观看 | 日本免费一二区视频 | 欧美人在线一区二区三区 | 日本精品99 | 久久综合99re久久爱 | 99国产精品热久久久久久夜夜嗨 | 精品在线一区 | 黑人边吃奶边扎下面激情视频 | 99久久国产综合精品五月天 | 视频三区精品中文字幕 | 特级毛片免费观看视频 | 久久精品国产精品亚洲艾 | 看欧美的一级毛片 | 大量愉拍情侣在线视频 |