以前對于Activity的啟動模式隻限于文字說明了解的層面,但最近的一個問題讓我對啟動模式有了更深的了解。
Activity有四大啟動模式:standard,singleTop,singleTask,singleInstance,這些啟動模式的特點就不在這裡細說,主要說一下SingleInstance這種啟動模式的Activity啟動其它模式的Activity的效果與可能出現的問題:
問題是這麼描述的,A棧最頂層的一個Activity啟動了一個啟動模式為SingleInstance的Activity-B,那麼如果B啟動一個啟動模式為standard的Activity-C,那麼C會出現在哪個棧?是A上面還是B,還是建一個新棧C?
今天我就被這種情況給困住了,因為我無意中造成了這種情況:B一旦啟動C,則A也會被帶出來,我在執行回退操作的時候的順序是C->A,不見了B棧中的Activity對象,我剛開始以為是B或者C無意中啟動了A最頂層的對象并消失,但是後來發現我在退出程式的時候發現B棧中的對象B中會報錯,我猜B對象可能在程式退出的時候還存活,隻是它沒有存在于正常的回退棧中。如下圖所示:
對于B消失的這種情況,建議将啟動模式改為SingleTask,B啟動C之後,C位于B棧内,回退也是正常流程,如果B設定為了SingleInstance,則會出現意料之外的問題,很難找到病症。