亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android Activity的4種啟動(dòng)模式圖文介紹

 更新時(shí)間:2020年11月13日 12:04:23   作者:黃林晴_阿黃哥  
這篇文章主要給大家介紹了關(guān)于Android Activity的4種啟動(dòng)模式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

記得第一次探討Activity的啟動(dòng)模式,是在2017年8月份,那個(gè)時(shí)候?qū)σ荒旰笞叱鲂iT(mén)的未來(lái)很是憧憬,時(shí)間真快,已經(jīng)畢業(yè)四個(gè)月,工作和生活也都趨于穩(wěn)定。

一、小前言

相信很多人和我一樣,在初學(xué)Android甚至初入職場(chǎng)的時(shí)候不了解Acticity的啟動(dòng)模式,或者為了面試刷題刷到了,但并不理解啟動(dòng)模式的作用,以及如何正確的使用啟動(dòng)模式而不是所有的都是用默認(rèn)模式。

二、Activity啟動(dòng)模式簡(jiǎn)介

Activity有四種啟動(dòng)模式,standard、singleTop、singleTask、singleInstance,默認(rèn)啟動(dòng)模式是standard

2.1 standard 模式

程序啟動(dòng)的時(shí)候,會(huì)默認(rèn)創(chuàng)建一個(gè)任務(wù)棧,Activity是放在任務(wù)棧里面的,比如我們新建一個(gè)項(xiàng)目,默認(rèn)生成一個(gè)ActivityA,那么此時(shí)任務(wù)棧是這樣的:

​,比如我們?cè)贏ctivityA中有一個(gè)按鈕,點(diǎn)擊按鈕跳轉(zhuǎn)到ActivityB,ActivityB中有一個(gè)按鈕,點(diǎn)擊按鈕跳轉(zhuǎn)到ActivityC,那么此時(shí)該棧是這樣的:

那么如果在ActivityC中有個(gè)按鈕跳轉(zhuǎn)到ActivityB呢?沒(méi)錯(cuò),是再次創(chuàng)建一個(gè)ActivityB實(shí)例

那么此時(shí),我們點(diǎn)擊返回鍵,會(huì)首先移除棧頂?shù)腁ctivityB,回到ActivityC,在移除棧頂?shù)腁ctivityC回到ActivityB,以此類(lèi)推。

當(dāng)Activity全部退出時(shí),系統(tǒng)會(huì)自動(dòng)回收這個(gè)空棧。

2.2 singleTop模式

改變Activity的啟動(dòng)模式,可以在配置文件中為Activity添加lauchMode屬性

singleTop模式為棧頂復(fù)用模式,通俗的說(shuō),就是如果棧頂?shù)腁ctivity和啟動(dòng)的Activity的是同一個(gè),那么就直接復(fù)用,比如還是在ActivityA中跳轉(zhuǎn)到ActivityB,我們將ActivityB的啟動(dòng)模式設(shè)置為singleTop,因?yàn)楫?dāng)前棧頂是ActivityA,不是ActivityB,所以會(huì)創(chuàng)建新的ActivityB實(shí)例放入任務(wù)棧中

現(xiàn)在我們?cè)贏ctivityB中點(diǎn)擊按鈕跳轉(zhuǎn)ActivityB,因?yàn)楫?dāng)前棧頂就是ActivityB所以會(huì)直接復(fù)用,此時(shí)棧內(nèi)仍是ActivityB和ActivityA,此時(shí)點(diǎn)擊返回按鈕會(huì)直接退回到ActivityA。

2.3 singleTask 模式

singleTask是棧內(nèi)復(fù)用模式,在這里棧內(nèi)復(fù)用要區(qū)分要啟動(dòng)的Activity的所需棧是否是當(dāng)前棧

2.3.1 是當(dāng)前棧

比如現(xiàn)在有ActivityA 啟動(dòng)模式為singleTask ,在ActivityA中啟動(dòng)ActivityB,ActivityB在棧中不存在實(shí)例,則創(chuàng)建ActivityB實(shí)例,此時(shí)棧為:

假設(shè)現(xiàn)在在ActivityB中啟動(dòng)ActivityA,會(huì)在當(dāng)前棧中是否有ActivityA,若有則將ActivityA移到棧內(nèi),將位于ActivityA之上的移出棧頂,那么現(xiàn)在棧為:

此時(shí)按返回鍵會(huì)直接退出程序,如果當(dāng)前棧為

我們現(xiàn)在啟動(dòng)ActivityB中啟動(dòng)ActivityA,則會(huì)將位于ActivityA棧頂?shù)腁ctivityB、ActivityC以及ActivityB移出棧頂,此時(shí)棧內(nèi)只是有ActivityA。

2.3.1 不是當(dāng)前棧

不是當(dāng)前棧的情況比較特殊,這里簡(jiǎn)單介紹

假設(shè)當(dāng)前任務(wù)棧是A,A棧中有ActivityA、ActivityB,在B中啟動(dòng)ActivityC,并且ActivityC所需的任務(wù)棧為B,棧B不存在所以會(huì)首先創(chuàng)建棧B,然后創(chuàng)建ActivityC實(shí)例放入棧B中

那么我們?nèi)绾沃付▎?dòng)的Activity所需的棧名稱(chēng),這里就要說(shuō)TaskAffinity參數(shù),這里我們參考官方文檔:

developer.android.com/guide/topic

TaskAffinity可以理解為任務(wù)親屬性或相關(guān)性,默認(rèn)情況下,應(yīng)用中的所有 Activity 都具有相同的親和關(guān)系

默認(rèn)任務(wù)棧的名字為應(yīng)用包名,同樣我們可以在配置文件中設(shè)置TaskAffinity屬性,但必須和singleTask啟動(dòng)模式配對(duì)使用

2.4 singleInstance模式

singleInstance模式也是"棧內(nèi)"復(fù)用模式,不過(guò),比如現(xiàn)在當(dāng)前棧中有ActivityA,我們?cè)贏中啟動(dòng)ActivityB,ActivityB的啟動(dòng)模式是singleInstance,此時(shí)會(huì)創(chuàng)建一個(gè)新的任務(wù)棧,創(chuàng)建ActivityB實(shí)例將ActivityB放在新的任務(wù)棧中

2.5 Java代碼設(shè)置啟動(dòng)模式

除了在配置文件中,我們還可以通過(guò)在Java代碼中設(shè)置啟動(dòng)模式

intent.setFlags();

singleTask 對(duì)應(yīng) FLAG_ACTIVITY_NEW_TASK

singleTop 對(duì)應(yīng) FLAG_ACTIVITY_SINGLE_TOP

到此這篇關(guān)于Android Activity的4種啟動(dòng)模式的文章就介紹到這了,更多相關(guān)Android Activity的4種啟動(dòng)模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android集成百度地圖開(kāi)發(fā)流程和注意事項(xiàng)

    Android集成百度地圖開(kāi)發(fā)流程和注意事項(xiàng)

    現(xiàn)在很多項(xiàng)目都需要集成百度地圖,所以就把自己做過(guò)一個(gè)項(xiàng)目的經(jīng)驗(yàn)寫(xiě)出來(lái)和大家分享,方便自己和大家使用的時(shí)候參考借鑒,下面就來(lái)一起看看Android集成百度地圖開(kāi)發(fā)流程和注意事項(xiàng)吧。
    2016-09-09
  • Android中Hilt的使用詳解

    Android中Hilt的使用詳解

    Hilt?是?Android?的依賴(lài)項(xiàng)注入庫(kù),可減少在項(xiàng)目中執(zhí)行手動(dòng)依賴(lài)項(xiàng)注入的樣板代碼,本文就來(lái)為大家介紹一下Hilt的具體使用吧,希望對(duì)大家有所幫助
    2023-06-06
  • 淺談Android Aidl 通訊機(jī)制

    淺談Android Aidl 通訊機(jī)制

    這篇文章主要介紹了淺談Android Aidl 通訊機(jī)制 的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • Android使用屬性動(dòng)畫(huà)如何自定義倒計(jì)時(shí)控件詳解

    Android使用屬性動(dòng)畫(huà)如何自定義倒計(jì)時(shí)控件詳解

    自Android 3.0版本開(kāi)始,系統(tǒng)給我們提供了一種全新的動(dòng)畫(huà)模式,屬性動(dòng)畫(huà)(property animation),它的功能非常強(qiáng)大,下面這篇文章主要給大家介紹了關(guān)于Android使用屬性動(dòng)畫(huà)如何自定義倒計(jì)時(shí)控件的相關(guān)資料,需要的朋友可以參考下
    2018-05-05
  • Android Presentation雙屏異顯開(kāi)發(fā)流程詳細(xì)講解

    Android Presentation雙屏異顯開(kāi)發(fā)流程詳細(xì)講解

    最近開(kāi)發(fā)的一個(gè)項(xiàng)目,有兩個(gè)屏幕,需要將第二個(gè)頁(yè)面投屏到副屏上,這就需要用到Android的雙屏異顯(Presentation)技術(shù)了,研究了一下,這里做下筆記
    2023-01-01
  • android 網(wǎng)絡(luò)請(qǐng)求庫(kù)volley方法詳解

    android 網(wǎng)絡(luò)請(qǐng)求庫(kù)volley方法詳解

    這篇文章主要介紹了android 網(wǎng)絡(luò)請(qǐng)求庫(kù)volley方法詳解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • Android?十六進(jìn)制狀態(tài)管理實(shí)例詳解

    Android?十六進(jìn)制狀態(tài)管理實(shí)例詳解

    這篇文章主要為大家介紹了Android?十六進(jìn)制狀態(tài)管理實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Android延時(shí)操作的三種方法

    Android延時(shí)操作的三種方法

    這篇文章主要為大家詳細(xì)介紹了Android延時(shí)操作的三種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Android實(shí)現(xiàn)系統(tǒng)語(yǔ)言切換功能

    Android實(shí)現(xiàn)系統(tǒng)語(yǔ)言切換功能

    這篇文章主要為大家詳細(xì)介紹了Android系統(tǒng)語(yǔ)言切換功能的實(shí)現(xiàn)方法,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Android基礎(chǔ)之使用Fragment控制切換多個(gè)頁(yè)面

    Android基礎(chǔ)之使用Fragment控制切換多個(gè)頁(yè)面

    Android官方已經(jīng)提供了Fragment的各種使用的Demo例子,在我們SDK下面的API Demo里面就包含了Fragment的各種使用例子,需要看Demo的朋友,直接看API Demo那個(gè)程序就可以了,不用到處去找。里面分開(kāi)不同功能,實(shí)現(xiàn)了不同的類(lèi)
    2013-07-07

最新評(píng)論