結(jié)束多個(gè)Activity沮焕,任務(wù)棧的管理使用

首先要知道的概念是 棧 這個(gè)一般都知道的了,然后隧甚,Android中activity的裝載方式就是使用的棧的方式的车荔。

相信大家經(jīng)常會(huì)遇到這樣的一種情況
在某個(gè)activity中點(diǎn)個(gè)按鈕,然后跳的另一個(gè)activity戚扳,但是要finish掉之前的所有activity
(你說(shuō)你沒遇到忧便? 反正我是遇到了)
最經(jīng)典的例子就是,那個(gè)坑爹的退出登錄一般是在一個(gè)叫 SetActivity 里面帽借,可是這個(gè)SetActivity 是 MainActivity 跳過(guò)來(lái)的珠增,點(diǎn)擊退出登錄,可以干掉的是 SetActivity 然后跳到 LoginActivity,但是 MainActivity 還在砍艾,不符合跳轉(zhuǎn)邏輯啊蒂教。

文字描述有點(diǎn)累贅,換個(gè)抽象的
定義
S:SetActivity
M:MainActivity
L:LoginActivity

開始是
M,S
退出登錄是
M,L
再登錄是
M,L,M
多了個(gè)M

這還是只多了一個(gè)的情況脆荷,挺好解決的
問(wèn)題是我遇到的是多了N多個(gè)activity在中間凝垛,分分鐘跳轉(zhuǎn)就亂了

解決的辦法有3種

第一種:用個(gè)list裝起來(lái)全部的activity,每次打開一個(gè)activity的時(shí)候傳個(gè)context進(jìn)去,finish的時(shí)候移除就好苔严,可以用BaseActivity封裝好也不是特別麻煩定枷,要干掉全部的時(shí)候,一個(gè)循環(huán)就干掉了届氢,詳細(xì)的代碼百度下就好

第二種:用廣播欠窒,就是之前寫的RxBus或者eventBus,或者自己寫退子,要退出了發(fā)送個(gè)退出的廣播岖妄,要關(guān)掉的activity注冊(cè)個(gè)監(jiān)聽接收廣播后finish掉就好。一開始我也是這么干的寂祥,后來(lái)中間多了太多activity了荐虐,代碼差點(diǎn)亂套。

第三種:這種其實(shí)才是最正宗的
辣就是設(shè)置啟動(dòng)方式
其實(shí)一直都知道activity的啟動(dòng)方式有4種

standard 這個(gè)是默認(rèn)的丸凭,正常都用這種
singleInstance這個(gè)是坑爹的福扬,一般不用,也最好不要亂用惜犀,它會(huì)新建多一個(gè)棧
手機(jī)查看所有啟動(dòng)應(yīng)用的窗口再一鍵清除的嘛铛碑,具體表現(xiàn)就是用了以后,這里會(huì)有2個(gè)窗口虽界。反正不用就是了

singleTop這個(gè)很不錯(cuò)
比如默認(rèn)就是
A-B-C-D-D-D-D

用了這個(gè)后就是
A-B-C-D
D這個(gè)activity再打開自己汽烦,就不會(huì)new一個(gè)了,就會(huì)一直用自己這個(gè)

但是··············
不會(huì)重新調(diào)用
onCreate
而是調(diào)用
onNewIntent
這個(gè)方法了莉御,所有新的數(shù)據(jù)啊什么的要放這里面
比如我傳值過(guò)來(lái)

    @Override
    protected void onNewIntent(Intent intent) {
        //data= getIntent().getStringExtra("數(shù)據(jù)");    //坑點(diǎn)
        String data = intent.getStringExtra("數(shù)據(jù)");  //注意點(diǎn)
        super.onNewIntent(intent);
    }

getIntent()是之前的intent數(shù)據(jù)
新打開的intent的數(shù)據(jù)是(Intent intent)這里面intent的數(shù)據(jù)

好撇吞,最后一種,也是題目能解決結(jié)束多個(gè)activity的這種
好東西總要壓軸嘛
singleTask就是你了

它的功能就是
如果要啟動(dòng)的Activity不在礁叔,就創(chuàng)建新的然后放到棧頂牍颈。
如果要啟動(dòng)的Activity已經(jīng)在棧頂,就跟singleTop模式一樣晴圾。
如果要啟動(dòng)的Activity已經(jīng)在于棧中颂砸,就會(huì)干掉這個(gè)Activty上面的所有其他Activty。

舉個(gè)栗子:
1.A-B-C-D------E
A-B-C-D-E

2.A-B-C-D------D
A-B-C-D------D

3.A-B-C-D------B
就變成
A-B

就是這么炫酷

好回到上面的那個(gè)難題

開始是
M,S
退出登錄是
M,L
再登錄用了這個(gè)以后就是
M,L-----M就只剩下了M

雖然退出登錄并不能結(jié)束全部activity然后跳到LoginActivity死姚,
但是這樣的邏輯才是最正確的人乓,再登錄以后就一切正常了。

講了這么多怎么樣設(shè)置才是重點(diǎn)
其實(shí)出乎意料的簡(jiǎn)單
就是在manifest里面

        <activity
            android:name=".******.****.*******"
            android:launchMode="singleTop"   //這就行了
            android:screenOrientation="portrait" //這個(gè)是豎屏顯示都毒,表示不能橫屏
            android:theme="@style/AppTheme"/>

當(dāng)然也可以在intent跳轉(zhuǎn)的時(shí)候給intent加個(gè)Flag色罚,你喜歡就好,反正我不想那樣加
clearTaskOnLaunch
話說(shuō)這個(gè)也是管理activity棧的很有意思账劲,雖然用不到戳护,有興趣可以去找找

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末金抡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子腌且,更是在濱河造成了極大的恐慌梗肝,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铺董,死亡現(xiàn)場(chǎng)離奇詭異巫击,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)精续,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門坝锰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人重付,你說(shuō)我怎么就攤上這事顷级。” “怎么了确垫?”我有些...
    開封第一講書人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵弓颈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我森爽,道長(zhǎng)恨豁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任爬迟,我火速辦了婚禮,結(jié)果婚禮上菊匿,老公的妹妹穿的比我還像新娘付呕。我一直安慰自己,他們只是感情好跌捆,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開白布徽职。 她就那樣靜靜地躺著,像睡著了一般佩厚。 火紅的嫁衣襯著肌膚如雪姆钉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評(píng)論 1 308
  • 那天抄瓦,我揣著相機(jī)與錄音潮瓶,去河邊找鬼。 笑死钙姊,一個(gè)胖子當(dāng)著我的面吹牛毯辅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播煞额,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼思恐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沾谜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起胀莹,我...
    開封第一講書人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤基跑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后描焰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涩僻,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年栈顷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逆日。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡萄凤,死狀恐怖室抽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情靡努,我是刑警寧澤坪圾,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站惑朦,受9級(jí)特大地震影響兽泄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜漾月,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一病梢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梁肿,春花似錦蜓陌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至烛芬,卻和暖如春隧期,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赘娄。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工仆潮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人擅憔。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓鸵闪,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親暑诸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蚌讼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容