管理方式
- Activity的管理方式 = 任務(wù)棧
- 任務(wù)棧 采用的結(jié)構(gòu) = “后進(jìn)先出” 的棧結(jié)構(gòu)
- 每按一次Back鍵茉兰,就有一個(gè) Activity出棧
區(qū)別:
啟動(dòng)模式的設(shè)置
啟動(dòng)模式有2種設(shè)置方式:
1.在 AndroidMainifest設(shè)置
<activity android:name=".MainActivity"
android:launchMode="singleTop">
有四種模式
standard
默認(rèn)啟動(dòng)模式,每次啟動(dòng)Activity,無論任務(wù)棧中是否已經(jīng)有這個(gè)Activity的實(shí)例,系統(tǒng)都會(huì)創(chuàng)建一個(gè)新的Activity實(shí)例讨永。
適用場(chǎng)景:普通頁面
singleTop
singleTop模式的Activity已經(jīng)位于任務(wù)棧的棧頂滔驶,再去啟動(dòng)它時(shí),不會(huì)再創(chuàng)建新的實(shí)例,如果不位于棧頂卿闹,就會(huì)創(chuàng)建新的實(shí)例揭糕。
適用場(chǎng)景:通知、新聞(APP接收到多條推送消息锻霎,點(diǎn)開不同消息著角,均由同一實(shí)例展示。)
singleTask
SingleTask模式的Activity在同一個(gè)Task內(nèi)只有一個(gè)實(shí)例旋恼,如果Activity已經(jīng)位于棧頂吏口,系統(tǒng)不會(huì)創(chuàng)建新的Activity實(shí)例,和singleTop模式一樣冰更。但Activity已經(jīng)存在但不位于棧頂時(shí)产徊,系統(tǒng)就會(huì)把該Activity移到棧頂,并把它上面的activity出棧蜀细。
適用場(chǎng)景:主頁舟铜,無論哪種業(yè)務(wù)場(chǎng)景下再次回到此頁,都不應(yīng)保留之上Activity奠衔。
singleInstance
和singleTask不同谆刨,singleTask只是任務(wù)棧內(nèi)單例,系統(tǒng)里是可以有多個(gè)singleTask Activity實(shí)例的归斤,而singleInstance Activity在整個(gè)系統(tǒng)里只有一個(gè)實(shí)例痊夭,啟動(dòng)一singleInstance的Activity時(shí),系統(tǒng)會(huì)創(chuàng)建一個(gè)新的任務(wù)棧脏里,并且這個(gè)任務(wù)棧只有他一個(gè)Activity生兆。
適用場(chǎng)景:系統(tǒng)鬧鐘頁面、來電顯示、系統(tǒng)通訊錄鸦难,不同APP調(diào)用此類Activity 時(shí)根吁,首次創(chuàng)建實(shí)例,之后其他APP只能復(fù)用此實(shí)例合蔽。
2.通過 Intent設(shè)置標(biāo)志位
Intent inten = new Intent (ActivityA.this,ActivityB.class);
intent.addFlags(Intent,FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
二者設(shè)置的區(qū)別
- 優(yōu)先級(jí)不同 Intent設(shè)置方式的優(yōu)先級(jí) > Manifest設(shè)置方式击敌,即以前者為準(zhǔn)
- 限定范圍不同 Manifest設(shè)置方式無法設(shè)定 FLAG_ACTIVITY_CLEAR_TOP; Intent設(shè)置方式 無法設(shè)置單例模式( SingleInstance)