standard,創(chuàng)建一個新的Activity绊茧。
singleTop,棧頂不是該類型的Activity打掘,創(chuàng)建一個新的Activity华畏。否則,onNewIntent尊蚁。
singleTask亡笑,回退棧中沒有該類型的Activity,創(chuàng)建Activity横朋,否則仑乌,onNewIntent+ClearTop。
注意:
設(shè)置了"singleTask"啟動模式的Activity琴锭,它在啟動的時候晰甚,會先在系統(tǒng)中查找屬性值affinity等于它的屬性值taskAffinity的Task存在;如果存在這樣的Task决帖,它就會在這個Task中啟動厕九,否則就會在新的任務棧中啟動。因此地回, 如果我們想要設(shè)置了"singleTask"啟動模式的Activity在新的任務中啟動扁远,就要為它設(shè)置一個獨立的taskAffinity屬性值。
如果設(shè)置了"singleTask"啟動模式的Activity不是在新的任務中啟動時刻像,它會在已有的任務中查看是否已經(jīng)存在相應的Activity實例畅买, 如果存在,就會把位于這個Activity實例上面的Activity全部結(jié)束掉细睡,即最終這個Activity 實例會位于任務的Stack頂端中谷羞。
在一個任務棧中只有一個”singleTask”啟動模式的Activity存在。他的上面可以有其他的Activity溜徙。這點與singleInstance是有區(qū)別的洒宝。
singleInstance,回退棧中萌京,只有這一個Activity雁歌,沒有其他Activity。
singleTop適合接收通知啟動的內(nèi)容顯示頁面知残。
例如靠瞎,某個新聞客戶端的新聞內(nèi)容頁面,如果收到10個新聞推送,每次都打開一個新聞內(nèi)容頁面是很煩人的乏盐。
singleTask適合作為程序入口點佳窑。
例如瀏覽器的主界面。不管從多少個應用啟動瀏覽器父能,只會啟動主界面一次神凑,其余情況都會走onNewIntent,并且會清空主界面上面的其他頁面何吝。
singleInstance應用場景:
鬧鈴的響鈴界面溉委。 你以前設(shè)置了一個鬧鈴:上午6點。在上午5點58分爱榕,你啟動了鬧鈴設(shè)置界面瓣喊,并按 Home 鍵回桌面;在上午5點59分時黔酥,你在微信和朋友聊天藻三;在6點時,鬧鈴響了跪者,并且彈出了一個對話框形式的 Activity(名為 AlarmAlertActivity) 提示你到6點了(這個 Activity 就是以 SingleInstance 加載模式打開的)棵帽,你按返回鍵,回到的是微信的聊天界面渣玲,這是因為 AlarmAlertActivity 所在的 Task 的棧只有他一個元素岖寞, 因此退出之后這個 Task 的棧空了柜蜈。如果是以 SingleTask 打開 AlarmAlertActivity,那么當鬧鈴響了的時候指巡,按返回鍵應該進入鬧鈴設(shè)置界面淑履。