欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android LaunchMode四種啟動模式詳細(xì)介紹

 更新時間:2016年12月22日 09:39:49   投稿:lqh  
這篇文章主要介紹了Android LaunchMode四種啟動模式詳細(xì)介紹的相關(guān)資料,這里對launchmode的使用方法進(jìn)行了詳解及啟動模式的比較,需要的朋友可以參考下

Android LaunchMode詳解

越是做的時間越長,基礎(chǔ)知識就忘的越干凈,最近做一個項(xiàng)目中,發(fā)現(xiàn)啟動的幾個Activity居然重疊了,我ri~~,再不回憶一下就要退出Android界了。

概念解釋

Task

Task叫做任務(wù),這個簡單,表示我們需要完成的事情,注意,這里我們說的是任務(wù),是個名詞,例如要發(fā)短信,那我們的任務(wù)就是發(fā)送一條短信,僅此而已,再例如教官說:”張三,你去!”,ok,那張三的任務(wù)就是。

Back Stack

我們常叫做回退棧,或者是任務(wù)棧,這個是什么意思呢?上面我們說過,需要完成任務(wù),那我們就需要使用一系列的Activity來完成,例如發(fā)短信,則完成該任務(wù)需要如下步驟:

  1. 打開短信主頁面MainActivity
  2. 點(diǎn)擊添加短信按鈕,打開NewSMSActivity
  3. 在NewSMSActivity中編寫短信并發(fā)送

以上的任務(wù)中涉及到兩個Activity,那這兩個Activity就存放在這個Back Stack中,又因?yàn)锽ack Stack是棧類型的數(shù)據(jù)結(jié)構(gòu),所以上面的步驟在這個Back Stack中的活動順序如下:

  1. MainActivity先壓棧
  2. 點(diǎn)擊添加按鈕,NewSMSActivity壓棧,
  3. 短信發(fā)送完成,點(diǎn)擊返回按鈕,NewSMSActivity彈棧,回到MainActivity
  4. 在MainActivity點(diǎn)擊返回按鈕,MainActivity彈棧,此時該Back Stack為空,就返回到Launcher了

所以我們明白了,這個回退棧其實(shí)就是一個存儲Activity實(shí)例的容器,執(zhí)行每個Task時,先創(chuàng)建一個Back Stack,在Task執(zhí)行過程中將所使用的Activity都按照FILO的順序以此壓入這個Back Stack,Task目標(biāo)完成之后,按下返回按鈕時,Back Stack中的Activity按照壓棧相反地的順序以此彈棧,直到棧中沒有Activity實(shí)例時,進(jìn)入Launcher。

由此,我們還可以知道,每個Task和Back Stack是一一對應(yīng)的關(guān)系,一般情況下,每需要執(zhí)行一個Task時,都至少需要一個Back Stack容器,并且這個容器中都至少會有一個Activity實(shí)例。

LaunchMode的作用和使用方法

一般情況,如果沒精神病,LaunchMode是用在Activity上面的,我們就談?wù)勗贏ctivity上的LaunchMode

LaunchMode作用

顧名思義,LaunchMode就是啟動模式,啥是啟動模式?啟動模式意思是使用不同的模式啟動之后,會有不同的屬性和表現(xiàn),舉個例子,鋼鐵俠使用正常模式啟動,一般可以秒殺所有小兵小將,但是如果對付發(fā)狂的綠巨人浩克,就需要啟動超強(qiáng)模式,穿上反浩克裝甲,要不然打不過,放到我們Actiivty這里也是一樣,既然是配置在Activity上的,那就說明Activity有好幾種啟動模式,使用不同的啟動模式啟動的Activity有不同的屬性和表現(xiàn)。

那為啥需要啟動模式呢?需求!對,需求是所有東西被建立或者被制造出來的原因,因?yàn)槲覀儗ctiivty有不同的需求,舉個老生常談的發(fā)郵件例子,郵件主頁Activity要求不論怎么打開,打開多少次,就只能有一個主頁Activity的實(shí)例,對吧,如果有多個實(shí)例我們就很麻煩,不知道顯示哪個,也不知道要關(guān)閉哪個,那這就是個需求,對應(yīng)這個需求,我們就需要對這個主頁Activity設(shè)置一種啟動模式,不論怎么打開就只有一個實(shí)例,這樣需求就滿足啦。

LaunchMode使用方法

按照Android Developer上的說明,LaunchMode有兩個使用地方,一個是Mainfest的activity節(jié)點(diǎn)下,一個是在startActivity方法的Intent中設(shè)置Flag,第二種方法我們后續(xù)再討論,先說說第一種方法。

要告訴小白的是,LaunchMode要在啟動該Activity之前使用才有效,如果Activity都已經(jīng)啟動了,實(shí)例都創(chuàng)建完了,再設(shè)置什么模式都沒用啦。

第一種使用方式特別簡單,在Mainfest中的activity節(jié)點(diǎn)中添加android:launchMode即可,如下所示:

<activity
  android:name=".MainActivity"
  android:label="郵件列表"
  android:launchMode="singleTask">
</activity>

有四種launchMode可選,分別是:

  1. “standard”
  2. “singleTop”
  3. “singleTask”
  4. “singleInstance”

如果不添加launchMode也可以,默認(rèn)的launchMode是”standard” 。

按照Android Developer官方上,他們按照Activity是否可以被實(shí)例化多次,把這四個模式分了兩個組, “standard” 和”singleTop” 屬于可以被實(shí)例化多次這個組,他們的實(shí)例可以屬于任何Task,并且可以位于Back Stack的任何位置,其余兩個屬于不可被實(shí)例化多次這組,他們常用于啟動一個Task,所以一個Task只有一個這種實(shí)例,并且這個還往往位于Back Stack的最開始。這種分組可以幫助我們初步理解每種啟動模式的區(qū)別。

standard

從現(xiàn)在開始好好講解這四種啟動模式了,首先看看”standard”,有時稱為標(biāo)準(zhǔn)模式。

前面我們說過,Activity默認(rèn)就是這種模式的,所以你的Activity設(shè)置和不設(shè)置這個沒什么區(qū)別,那這種模式的表現(xiàn)是什么樣子的呢?

假設(shè)我們有一個”standard”模式的Activity,頁面上有個按鈕,點(diǎn)擊這個按鈕就會啟動這個Activity自身,由于設(shè)置的是”standard”模式,每次啟動這個Activity,就會創(chuàng)建這個Activity的新的實(shí)例,并依次放入Back Stack,點(diǎn)擊一百次就會創(chuàng)建一百個這個Activity的實(shí)例。

“standard”是最簡單的模式,也符合我們正常的思維邏輯,所以最好理解,我用簡陋的畫圖工具畫了個圖,湊合著看吧:

standard模式

singleTop

這種啟動模式和標(biāo)準(zhǔn)模式區(qū)別不大,只有一點(diǎn)點(diǎn)不同。

我們已經(jīng)知道,每個Activity的實(shí)例在Back Stack中存儲,既然是個Stack數(shù)據(jù)結(jié)構(gòu),那么第一個壓棧的實(shí)例我們叫做棧底實(shí)例,因?yàn)樗鼘⒈缓筮M(jìn)來的實(shí)例壓在最下面,最后被壓入的實(shí)例,稱作棧頂實(shí)例,因?yàn)樗鼊偙粔喝藯V?,暫時還沒有其他實(shí)例在它之上,如果棧中只有一個實(shí)例,那這個實(shí)例既是棧底實(shí)例,也是棧頂實(shí)例。

明白了棧底和棧頂?shù)母拍睿?rdquo;singleTop” 就好理解了,當(dāng)我們啟動”singleTop” 模式的Activity時,系統(tǒng)會檢查當(dāng)前的Back Stack的棧頂實(shí)例是不是這個”singleTop” 模式Activity的實(shí)例,如果是的話,就不創(chuàng)建新的實(shí)例了,直接復(fù)用這個已經(jīng)存在的棧頂實(shí)例。還拿我們上一個場景為例,如果這個Activity是”singleTop” 模式的,不論你怎么點(diǎn)按鈕,Back Stack只會有一個實(shí)例,因?yàn)闂m斠呀?jīng)存在一個這樣的實(shí)例,所以不會創(chuàng)建新的了。

如果上個例子不夠明確,我們可以舉個比較明顯的例子,有兩個Activity:ActivityA是標(biāo)準(zhǔn)模式,AvtivityB是”singleTop” 模式,完成一個Task,需要經(jīng)過以下步驟:

  1. 啟動ActivityA,在ActivityA中點(diǎn)擊按鈕啟動ActivityB,
  2. 在ActiivtyB中點(diǎn)擊按鈕,再次啟動ActivityB

根據(jù)之前的描述,當(dāng)ActivityB的實(shí)例第一次被創(chuàng)建時,是位于棧頂?shù)?,第二次嘗試創(chuàng)建ActivityB的實(shí)例之前,由于是”singleTop” 模式,并且棧頂已經(jīng)有它的實(shí)例,就不會再創(chuàng)建新的,這個Task完成之后,Back Stack中只有一個ActivityA的實(shí)例和一個ActivityB的實(shí)例,簡圖如下:

"singleTop" 模式

singleTask

接下來是”singleTask” 模式,還記得文章開頭說的兩個分組和區(qū)別嗎?如果你現(xiàn)在還記得,那你就理解了一大半了。

之前說過,”singleTask” 的Activity在一個Back Stack只會創(chuàng)建一個,這是和前兩個模式最大的不同,”singleTask” 和”singleTop”不同之處在于,創(chuàng)建實(shí)例時不僅僅只檢查棧頂是否已經(jīng)有實(shí)例,還會檢查整個Back Stack,只要Back Stack已經(jīng)存在實(shí)例,不論是位于棧頂,棧底還是哪里,都不會創(chuàng)建新的實(shí)例。

“singleTask” 模式不僅不會創(chuàng)建新的實(shí)例,還會將從已經(jīng)創(chuàng)建實(shí)例開始到棧頂?shù)乃袑?shí)例全部清除,并將已經(jīng)創(chuàng)建的實(shí)例放到棧頂,因?yàn)橹挥羞@樣做才會讓這個實(shí)例可以顯示到窗口上。

還是繼續(xù)上面的例子,ActivityC的啟動模式為”singleTask” ,我們在Back Stack中原來的ActivityA和ActivityB實(shí)例之間插入一個ActivityC的實(shí)例,形成這樣的Back Stack結(jié)構(gòu)之后,如果再次嘗試啟動ActivityC時,由于ActivityC的實(shí)例已經(jīng)存在,所以復(fù)用已經(jīng)存在的實(shí)例,并且清除實(shí)例到棧頂?shù)乃袑?shí)例,所以ActivityB的實(shí)例被清除了,此時Back Stack中就只有ActivtyA和ActivtyC的實(shí)例。

"singleTask" 模式

singleInstance

“singleInstance”是最后一個啟動模式,則是和其他三個模式都不同的。

我們之前談?wù)摰膯幽J?,基本都是在一個Back Stack范圍內(nèi)談?wù)撌欠裥枰匦聞?chuàng)建的問題,在這里,我們把范圍擴(kuò)大一下,討論在多個Back Stack之間重新創(chuàng)建的問題,設(shè)置了”singleInstance”模式的Activty,在啟動的時候,會脫離于當(dāng)前Task的Back Stack,在一個新的Back Stack中創(chuàng)建實(shí)例。

還是我們之前的例子,現(xiàn)在把ActivtyA,ActivityB和ActivtyC的實(shí)例依次放入Back Stack中,并將這個Back Stack編為1號,然后編寫一個ActivityD并將其設(shè)置為”singleInstance”模式,此時,如果我們在ActivityC中啟動ActivityD,那么ActiviyD的實(shí)例將不會位于1號Back Stack中,它將會在一個新的Back Stack中創(chuàng)建一個新的ActivityD實(shí)例,簡圖如下:

"singleInstance"模式

使用場景

不同的啟動模式,適用與應(yīng)用中的不同應(yīng)用場景。

standard

標(biāo)準(zhǔn)模式適用于大多數(shù)場景,因?yàn)樵趹?yīng)用中,我們基本上可以允許用戶同時進(jìn)行多個任務(wù),每個任務(wù)操作不同的數(shù)據(jù),這樣允許創(chuàng)建一個Activty的多個實(shí)例,例如新建郵件Activity,如果當(dāng)前正在新建一個給張三的郵件,此時同時需要創(chuàng)建一個給李四的郵件,此時Activty就要使用標(biāo)準(zhǔn)模式,這樣允許創(chuàng)建多個不同的實(shí)例,允許創(chuàng)建多封郵件。

singleTop

singleTop模式,由于其特點(diǎn)是檢查棧頂實(shí)例,可以用這個特性,防止短時間創(chuàng)建多個實(shí)例,例如有個按鈕,點(diǎn)擊之后打開一個播放視頻的Activty,如果用戶短時間重復(fù)點(diǎn)擊,不是singleTop模式的話,就會短時間在Back Stack中出現(xiàn)多個實(shí)例,而且每個實(shí)例的播放進(jìn)度不一致,如果是singleTop模式的話,不論打開多少次都沒有影響。

singleTask

這個模式,常用于那些有一定任務(wù),且任務(wù)已經(jīng)進(jìn)行了一部分,但是忽然又去做別的事情了,等會兒回來還要繼續(xù)任務(wù)的場景,還是播放那個視頻的例子,如果正在播放的時候需要去打開新Activty搜索相關(guān)視頻,搜索完畢又要回到播放頁面,那這個頁面就比較適合使用singleTask模式

singleInstance

這種模式較少使用,如果一定要在你的應(yīng)用中使用這種啟動模式,請?zhí)崆翱紤]好是否有這個必要,另外,在做一些特殊場景下的應(yīng)用,比如Launcher的主屏?xí)r,可能會使用得到。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • Android XmlPullParser 方式解析 Xml 文檔

    Android XmlPullParser 方式解析 Xml 文檔

    這篇文章主要介紹了Android XmlPullParser 方式解析 Xml 文檔的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Android UI:ListView - SimpleAdapter實(shí)例詳解

    Android UI:ListView - SimpleAdapter實(shí)例詳解

    這篇文章主要介紹了Android UI:ListView - SimpleAdapter實(shí)例詳解,SimpleAdapter是擴(kuò)展性最好的適配器,可以定義各種你想要的布局,而且使用很方便,需要的朋友可以參考下
    2016-11-11
  • android實(shí)現(xiàn)篩選菜單效果

    android實(shí)現(xiàn)篩選菜單效果

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)篩選菜單效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Android實(shí)現(xiàn)環(huán)形進(jìn)度條

    Android實(shí)現(xiàn)環(huán)形進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)環(huán)形進(jìn)度條,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Android開發(fā)之AAR文件的生成與使用步驟

    Android開發(fā)之AAR文件的生成與使用步驟

    Android中的aar主要是針對于Android Library而言的,可以簡單的理解為是對Android Library的打包,這個包的格式為.aar,下面這篇文章主要給大家介紹了關(guān)于Android開發(fā)之AAR文件的生成與使用步驟的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • 詳解Android中點(diǎn)擊事件的幾種實(shí)現(xiàn)方式

    詳解Android中點(diǎn)擊事件的幾種實(shí)現(xiàn)方式

    本篇文章主要介紹了Android中點(diǎn)擊事件的實(shí)現(xiàn)方式,點(diǎn)擊事件的實(shí)現(xiàn)分為3中,詳細(xì)的介紹了三種的用法,有興趣的可以了解一下。
    2016-12-12
  • 封裝flutter狀態(tài)管理工具示例詳解

    封裝flutter狀態(tài)管理工具示例詳解

    這篇文章主要為大家介紹了封裝flutter狀態(tài)管理工具示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • 詳解Android如何實(shí)現(xiàn)自定義的動畫曲線

    詳解Android如何實(shí)現(xiàn)自定義的動畫曲線

    最近在寫動畫相關(guān)的篇章,經(jīng)常會用到 Curve 這個動畫曲線類,那這個類到底怎么實(shí)現(xiàn)的?如果想自己來一個自定義的動畫曲線該怎么弄?本文將為大家詳細(xì)解答
    2022-04-04
  • Android 開機(jī)應(yīng)用掃描相關(guān)總結(jié)

    Android 開機(jī)應(yīng)用掃描相關(guān)總結(jié)

    本篇文章只是作為指南引導(dǎo)去看PkMS,不會貼大段代碼進(jìn)行分析,更多是基于方法分析實(shí)現(xiàn)的邏輯,另外就是代碼是基于Android 11,與Android 10之前代碼有比較大的差別。
    2021-05-05
  • Android實(shí)現(xiàn)滑動到頂部懸停的效果

    Android實(shí)現(xiàn)滑動到頂部懸停的效果

    這篇文章給大家介紹一種不常見的實(shí)現(xiàn)Android滑動到頂部懸停效果的方式,對大家開發(fā)Android具有一定的參考借鑒價值,有需要的朋友們可以來一起看看。
    2016-09-09

最新評論