由Actvity启动模式之SingleInstance引起的坑的反思
以前對(duì)于Activity的啟動(dòng)模式只限于文字說明理解的層面,但最近的一個(gè)問題讓我對(duì)啟動(dòng)模式有了更深的了解。
Activity有四大啟動(dòng)模式:standard,singleTop,singleTask,singleInstance,這些啟動(dòng)模式的特點(diǎn)就不在這里細(xì)說,主要說一下SingleInstance這種啟動(dòng)模式的Activity啟動(dòng)其它模式的Activity的效果與可能出現(xiàn)的問題:
問題是這么描述的,A棧最頂層的一個(gè)Activity啟動(dòng)了一個(gè)啟動(dòng)模式為SingleInstance的Activity-B,那么如果B啟動(dòng)一個(gè)啟動(dòng)模式為standard的Activity-C,那么C會(huì)出現(xiàn)在哪個(gè)棧?是A上面還是B,還是建一個(gè)新棧C?
今天我就被這種情況給困住了,因?yàn)槲覠o意中造成了這種情況:B一旦啟動(dòng)C,則A也會(huì)被帶出來,我在執(zhí)行回退操作的時(shí)候的順序是C->A,不見了B棧中的Activity對(duì)象,我剛開始以為是B或者C無意中啟動(dòng)了A最頂層的對(duì)象并消失,但是后來發(fā)現(xiàn)我在退出程序的時(shí)候發(fā)現(xiàn)B棧中的對(duì)象B中會(huì)報(bào)錯(cuò),我猜B對(duì)象可能在程序退出的時(shí)候還存活,只是它沒有存在于正常的回退棧中。如下圖所示:
對(duì)于B消失的這種情況,建議將啟動(dòng)模式改為SingleTask,B啟動(dòng)C之后,C位于B棧內(nèi),回退也是正常流程,如果B設(shè)置為了SingleInstance,則會(huì)出現(xiàn)意料之外的問題,很難找到病癥。
總結(jié)
以上是生活随笔為你收集整理的由Actvity启动模式之SingleInstance引起的坑的反思的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android官方开发文档Trainin
- 下一篇: Android官方开发文档Trainin