下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Activity有哪些啟動模式
這篇文章主要介紹了Activity有哪些啟動模式,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓在下帶著大家一起了解一下。前言平常我們啟動活動的時候就是直接startActivity或許并沒有注意活動的啟動模式,默認情況下都是以默認的啟動模式啟動。但啟動模式有時候是比較重要的。例如一個活動你想他只啟動一次不要有多個實例,那么你可能需要把他設(shè)置為singleTask模式。所以有必要了解一下這一些啟動模式。同時要注意一下,啟動模式≠啟動方式,啟動方式是指顯示啟動和隱式啟動,不要混淆,顯示啟動和隱式啟動后續(xù)我會有專門的文章講解。關(guān)于任務(wù)棧簡介要了解啟動模式,首先要了解一下關(guān)于任務(wù)棧的概念。關(guān)于任務(wù)棧的實現(xiàn)原理等我在這里就先不說了,這里主要簡單介紹一下什么是任務(wù)棧。我們啟動的活動實例都會放在一個叫做任務(wù)棧的東西里面。我們都知道棧是“后進先出”的特點。打個比方,任務(wù)棧就是一個羽毛球筒,活動實例就是一個個羽毛球,后放進去的只能先拿出來。所以當我們啟動一個app的時候,就會自動創(chuàng)建一個任務(wù)棧,然后我們就往里面丟活動實例。當我們按返回銷毀活動的時候,這些活動就依次從任務(wù)棧里面出來。當然,一個app可以擁有多個任務(wù)棧,例如使用singleInstence啟動的活動就是在一個獨立的任務(wù)棧中。了解完任務(wù)棧的概念,接下來就可以來看看活動的四種啟動模式。解析Activity的四種啟動模式standard這種是標準啟動模式,默認就是這種啟動模式。每次啟動這種啟動模式的活動的時候都會創(chuàng)建一個新的實例放入棧中,不管棧中是否已經(jīng)存在相同的實例。這也是最容易理解的。singleTop顧名思義,棧頂是單一實例的。什么意思呢。假設(shè)你現(xiàn)在啟動一個ActivityA,但是這個時候已經(jīng)存在一個ActivityA實例在棧頂,那么這個時候,就不會創(chuàng)建新的實例。但是如果,在非棧頂存在相同的實例,還是會創(chuàng)建新的實例的。例如,現(xiàn)在棧中的活動是ABC,A處于棧頂。然后此時啟動A,是不會再創(chuàng)建一個A活動出來,而是執(zhí)行A的onNewIntent方法;但是如果此時啟動C活動,由于棧頂是A不是C,那么還是會創(chuàng)建一個新的C實例出來,此時的棧情況就是CABC。singleTask單一任務(wù)模式。這個模式的意思是,在該活動的啟動棧中,只能存在單一實例,不管是否位于棧頂。與其他啟動模式不同的是,這個啟動模式可以指定棧去啟動。例如現(xiàn)在有一個棧Main,但是你可以給活動A指定一個棧名dev,那么啟動A的時候就會創(chuàng)建一個棧叫做dev。所以singleTask的意思就是,當你啟動一個啟動模式為singleTask的活動的時候,如果棧中沒有相同的實例,那么就會創(chuàng)建一個新的實例放入棧中;如果指定棧中存在相同的實例,例如棧中有ABC,然后你啟動B,那么這個時候不會去創(chuàng)建新的B實例,而是把B放到棧頂,并把A頂出去,再執(zhí)行B的onNewIntent方法,此時棧的情況就是BC。細心的讀者會發(fā)現(xiàn)“頂出去”。是的,我們都知道棧是后進先出的特點,例如你往筒里放了3個羽毛球,那你想要拿到中間那個羽毛球,是不是只能先把上面那個抽出來呢,同樣的道理,要想把B提到棧頂,那么必須把A頂出來。可能會有很多讀者誤以為啟動后是BAC,但其實是BC,因為A得先出棧,B才能出來。同理,如果棧中是ADFBC,這個啟動B,也是BC,上面的全部被出棧了。singleInstance單例模式。這個是singleTask的強化版本。他會自己新建一個棧并把這個新的實例放進去,而且這個棧只能放這個活動實例。所以當重復(fù)啟動這個活動的時候,只要他存在,都是調(diào)用這個活動onNewIntent方法并切換到這個棧中,并不會去創(chuàng)建新的實例。設(shè)置啟動模式的兩種方法了解了活動的四種啟動模式,接下來看看如何給他指定啟動模式。靜態(tài)設(shè)置靜態(tài)設(shè)置就是在AndroidManifest中給具體活動設(shè)置啟動模式。通過給活動指定launchMode參數(shù)來設(shè)置啟動模式。例如:
<activity
android:name=".MainActivity"
android:launchMode="singleInstance"/>動態(tài)設(shè)置動態(tài)設(shè)置是在啟動活動的時候再指定啟動模式,例如:Intent
intent
=
new
Intent();
intent.setClass(this,SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);可以看到我們通過intent.addFlags這個方法來指定啟動模式,這個方法傳入一個參數(shù)來指定啟動模式,其他的參數(shù)有:FLAG_ACTIVITY_NEW_TASK:singleTask模式FLAG_ACTIVITY_SINGLE_TOP:singleTop模式FLAG_ACTIVITY_CLEAR_TOP:清除該活動上方的所有活動。一般和singleTask一起使用。但是如果你的啟動模式是standard,那么這個活動連他之上的所有活動都會被出棧再創(chuàng)建一個新的實例放進去。例如現(xiàn)在棧中是ABCD,以FLAG_ACTIVITY_CLEAR_TOP+standard模式啟動C的時候,首先清理掉ABC,是的,C也會被清理,然后再創(chuàng)建一個新的C放進去,執(zhí)行之后就是CD。特別注意的坑singleInstance返回任務(wù)?,F(xiàn)在模擬一個場景:現(xiàn)在有三個活動A,B,C。A和C的啟動模式都是standard,B的啟動模式是singleInstance。先啟動A,再啟動B,然后再啟動C。這個時候問題來了,如果我這個時候按下返回鍵,是回到B嗎?答案是回到A。再按一下呢,返回桌面嗎?答案是回到B,再按一下再回到桌面。其實不難理解。我們都知道singleInstance會創(chuàng)建一個獨立的棧,當我們啟動A的時候,A位于棧First中,啟動B的時候,就會創(chuàng)建一個棧Second并把B實例放進去。這個時候再啟動C,就會切換到棧FIrst,因為singleInstance創(chuàng)建的棧只能放一個,所以C會放到棧First中,當按下返回的時候,棧First中的活動就會依次出棧,直到全部出完,才會切換到棧Second中。所以要注意這個點。singleTask多任務(wù)棧啟動問題這個問題和上面singleTop的本質(zhì)是一樣的。模擬一個場景:現(xiàn)在有兩個棧:First:ABC;Second:QWE。棧First位于前臺,棧Second位于后臺。A位于棧頂。這個時候以singleTask的模式啟動W,會發(fā)生什么樣的情況呢?首先會切換到棧Second,再把Q出棧,W提到棧頂,并執(zhí)行W的onNewIntent方法。這個時候按返回鍵就會把Second棧中的活動依次出棧,全部出完后才會切換到棧First。singleTask的TaskAffinity與allowTaskReparenting參數(shù)前面我們講到給singleTask模式指定要啟動的任務(wù)棧的名字,怎么指定呢?可以在AndroidManifest中指定相關(guān)的屬性,如下:<activity
android:name=".Main2Activity"
android:launchMode="singleTask"
android:taskAffinity="com.huan"
android:allowTaskReparenting="true"/>這里解釋一下這兩個參數(shù)taskAffinity:指定任務(wù)棧的名字。默認的任務(wù)棧是包名,所以不能以包名來命名。allowTaskReparenting:這個參數(shù)表示可不可以切換到新的任務(wù)棧,通常設(shè)置為true并和上面的參數(shù)一起使用。我前面講到可以給singleTask的活動指定一個棧名,然后啟動的時候,就會切換到那個棧,并把新的活動放進去。但是如果設(shè)置allowTaskReparenting參數(shù)為false的話是不會切換到新的棧的。這個參數(shù)的意思是可不可以把新的活動轉(zhuǎn)移到新的任務(wù)棧。簡單點來說
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025伸縮縫安裝工程勞務(wù)分包合同修改
- 9 知法守法依法維權(quán) 第二課時(說課稿)-2023-2024學年道德與法治六年級上冊統(tǒng)編版001
- 2023二年級數(shù)學上冊 六 表內(nèi)乘法和表內(nèi)除法(二)練習十四說課稿 蘇教版001
- 10《爬山虎的腳》第二課時 說課稿-2024-2025學年語文四年級上冊統(tǒng)編版
- Unit 3 My weekend plan Part 6(說課稿)-2024-2025學年人教PEP版英語六年級上冊
- 生了病怎么辦 (課件)-2024-2025學年人教版(2024)體育一年級全一冊
- Review Module Unit 1(說課稿)-2023-2024學年外研版(三起)英語四年級下冊
- 17《松鼠》說課稿-2024-2025學年五年級語文上冊統(tǒng)編版001
- 2025農(nóng)村宅基地轉(zhuǎn)讓合同模板
- 8網(wǎng)絡(luò)新世界 第一課時 說課稿-2023-2024學年道德與法治四年級上冊統(tǒng)編版
- 2025年全國科技活動周科普知識競賽試題庫及答案
- 工廠生產(chǎn)區(qū)清潔流程及安全規(guī)范
- 化學丨百師聯(lián)盟2025屆高三1月一輪復(fù)習聯(lián)考(五)化學試卷及答案
- 2024年全國職業(yè)院校技能大賽中職(酒店服務(wù)賽項)備賽試題庫(500題)
- 工程建設(shè)項目培訓
- 高速公路巡邏車司機勞動合同
- 2025中國大唐集團內(nèi)蒙古分公司招聘高頻重點提升(共500題)附帶答案詳解
- 充血性心力衰竭課件
- 2025年日歷(日程安排-可直接打印)
- 地理微格教學課件
- 合成氨操作規(guī)程
評論
0/150
提交評論