Android入門之Activity四種啟動(dòng)模式(standard、singleTop、singleTask、singleInstance)
當(dāng)應(yīng)用運(yùn)行起來后就會(huì)開啟一條線程,線程中會(huì)運(yùn)行一個(gè)任務(wù)棧,當(dāng)Activity實(shí)例創(chuàng)建后就會(huì)放入任務(wù)棧中。Activity啟動(dòng)模式的設(shè)置在AndroidManifest.xml文件中,通過配置Activity的屬性android:launchMode=""設(shè)置。
一、啟動(dòng)模式介紹
啟動(dòng)模式簡(jiǎn)單地說就是Activity啟動(dòng)時(shí)的策略,在AndroidManifest.xml中的標(biāo)簽的android:launchMode屬性設(shè)置;
啟動(dòng)模式有4種,分別為standard、singleTop、singleTask、singleInstance;
講解啟動(dòng)模式之前,有必要先講解一下“任務(wù)?!钡母拍?
任務(wù)棧
每個(gè)應(yīng)用都有一個(gè)任務(wù)棧,是用來存放Activity的,功能類似于函數(shù)調(diào)用的棧,先后順序代表了Activity的出現(xiàn)順序;比如Activity1-->Activity2-->Activity3,則任務(wù)棧為:
二、啟動(dòng)模式
(1)standard模式(默認(rèn)):每次激活A(yù)ctivity時(shí)(startActivity),都創(chuàng)建Activity實(shí)例,并放入任務(wù)棧;
我們平時(shí)直接創(chuàng)建的Activity都是這種模式的Activity,這種模式的Activity的特點(diǎn)是:只要你創(chuàng)建了Activity實(shí)例,一旦激活該Activity,則會(huì)向任務(wù)棧中加入新創(chuàng)建的實(shí)例,退出Activity則會(huì)在任務(wù)棧中銷毀該實(shí)例。
(2)singleTop模式:如果某個(gè)Activity自己激活自己,即任務(wù)棧棧頂就是該Activity,則不需要?jiǎng)?chuàng)建,其余情況都要?jiǎng)?chuàng)建Activity實(shí)例;
(3)singleTask模式:如果要激活的那個(gè)Activity在任務(wù)棧中存在該實(shí)例,則不需要?jiǎng)?chuàng)建,只需要把此Activity放入棧頂,并把該Activity以上的Activity實(shí)例都pop;
如果任務(wù)棧中存在該模式的Activity實(shí)例,則把棧中該實(shí)例以上的Activity實(shí)例全部移除,調(diào)用該實(shí)例的newInstance()方法重用該Activity,使該實(shí)例處?kù)稐m斘恢?,否則就重新創(chuàng)建一個(gè)新的Activity實(shí)例。
(4)singleInstance模式:如果應(yīng)用1的任務(wù)棧中創(chuàng)建了MainActivity實(shí)例,如果應(yīng)用2也要激活MainActivity,則不需要?jiǎng)?chuàng)建,兩應(yīng)用共享該Activity實(shí)例;
當(dāng)該模式Activity實(shí)例在任務(wù)棧中創(chuàng)建后,只要該實(shí)例還在任務(wù)棧中,即只要激活的是該類型的Activity,都會(huì)通過調(diào)用實(shí)例的newInstance()方法重用該Activity,此時(shí)使用的都是同一個(gè)Activity實(shí)例,它都會(huì)處于任務(wù)棧的棧頂。此模式一般用于加載較慢的,比較耗性能且不需要每次都重新創(chuàng)建的Activity。
SingTask的應(yīng)用:
可以用來退出整個(gè)應(yīng)用。
將主Activity設(shè)為SingTask模式,然后在要退出的Activity中轉(zhuǎn)到主Activity,然后重寫主Activity的onNewIntent函數(shù),并在函數(shù)中加上一句finish。
附:
退出單個(gè)Activity方法:
調(diào)用finish
殺死該進(jìn)程:killprocess(Process.mId)
終止正在運(yùn)行的虛擬機(jī):system.exit()
退出整個(gè)應(yīng)用:
制造拋異常導(dǎo)致整個(gè)程序退出
將所有的activity放入到一個(gè)list中,然后在需要退出的時(shí)候,將所有的activity,finish掉
通過廣播來完成退出功能
通過廣播來完成退出功能,具體實(shí)現(xiàn)過程是這樣的:在每個(gè)Activity創(chuàng)建時(shí)(onCreate時(shí))給Activity注冊(cè)一個(gè)廣播接收器,當(dāng)退出時(shí)發(fā)送該廣播即可。大概的代碼如下:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); IntentFilter filter = new IntentFilter(); filter.addAction("finish"); registerReceiver(mFinishReceiver, filter); …… } private BroadcastReceiver mFinishReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if("finish".equals(intent.getAction())) { Log.e("#########", "I am " + getLocalClassName() + ",now finishing myself..."); finish(); } } };
把上面的代碼寫在一個(gè)基類里面,這樣,在需要退出的地方調(diào)用close,發(fā)送廣播,每個(gè)Activity接收到廣播后,就會(huì)將自己finish掉。
以上所述是小編給大家分享的Android入門之Activity四種啟動(dòng)模式(standard、singleTop、singleTask、singleInstance),希望大家喜歡。
- Android Activity的4種啟動(dòng)模式圖文介紹
- Android中activity的啟動(dòng)模式
- 簡(jiǎn)單介紹Android中Activity的四種啟動(dòng)模式
- Android Activity啟動(dòng)模式全面解析
- Android Activity啟動(dòng)模式之singleTask實(shí)例詳解
- Android Activity啟動(dòng)模式之singleTop實(shí)例詳解
- Android Activity啟動(dòng)模式之standard實(shí)例詳解
- Android 啟動(dòng)模式FLAG_ACTIVITY_CLEAR_TOP案例詳解
相關(guān)文章
Android 開發(fā)之Dialog,Toast,Snackbar提醒
這篇文章主要介紹了Android 開發(fā)之Dialog,Toast,Snackbar提醒的相關(guān)資料,需要的朋友可以參考下2017-03-03Android觸摸事件如何實(shí)現(xiàn)筆觸畫布詳解
這篇文章主要給大家介紹了關(guān)于Android觸摸事件如何實(shí)現(xiàn)筆觸畫布的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10Android控件BottomSheet實(shí)現(xiàn)底邊彈出選擇列表
這篇文章主要介紹了Android控件BottomSheet實(shí)現(xiàn)底邊彈出選擇列表,比較常用的選擇條件或跳轉(zhuǎn)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08Android編輯框EditText與焦點(diǎn)變更監(jiān)視器及文本變化監(jiān)視器實(shí)現(xiàn)流程詳解
這篇文章主要介紹了Android編輯框EditText與焦點(diǎn)變更監(jiān)視器及文本變化監(jiān)視器實(shí)現(xiàn)流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2022-09-09Android實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼倒計(jì)時(shí)功能示例
本篇文章主要介紹了Android實(shí)現(xiàn)發(fā)送短信驗(yàn)證碼倒計(jì)時(shí)功能示例,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。2017-03-03android中實(shí)現(xiàn)指針滑動(dòng)的動(dòng)態(tài)效果方法
本次實(shí)現(xiàn)的是類似于墨跡天氣中軌跡圖片上指針隨著數(shù)值滾動(dòng)滑動(dòng)的效果,基本思路是開啟線程,控制指針?biāo)诘膇mageview控件的padding屬性。2013-03-03Android 打開相冊(cè)選擇單張圖片實(shí)現(xiàn)代碼
這篇文章主要介紹了Android 打開相冊(cè)選擇單張圖片實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-05-05Android之線程池ThreadPoolExecutor的簡(jiǎn)介
今天小編就為大家分享一篇關(guān)于Android之線程池ThreadPoolExecutor的簡(jiǎn)介,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03Android自定義控件之創(chuàng)建可復(fù)用的組合控件
這篇文章主要為大家詳細(xì)介紹了Android自定義控件之創(chuàng)建可復(fù)用的組合控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12