Activity四種啟動模式及其應用

  • standard,創建一個新的Activity。
  • singleTop,棧頂不是該類型的Activity,創建一個新的Activity。否則,onNewIntent。
  • singleTask,回退棧中沒有該類型的Activity,創建Activity,否則,onNewIntent+ClearTop。
  • singleInstance,回退棧中,只有這一個Activity,沒有其他Activity。

standard

簡介:

每次激活Activity時(startActivity),都創建Activity實例,并放入任務棧;


應用場景:

比如從應用列表頁中,點擊應用詳情,就可以用standard,一般情況下,都可以用standard。

singleTop

簡介:

如果某個Activity自己激活自己,即任務棧棧頂就是該Activity,則不需要創建,其余情況都要創建Activity實例;


應用:
  • 在通知欄點擊收到的通知,然后需要啟動一個Activity,這個Activity就可以用singleTop,否則用戶如果連續點擊好幾次,每次都會新建一個Activity。
  • 實際的開發過程中,測試妹紙沒準給你提過這樣的bug:某個場景下連續快速點擊,啟動了兩個Activity。如果這個時候待啟動的Activity使用 singleTop模式也是可以避免這個Bug的。
  • 在開發過程中,我們有一個場景是從城市列表頁選擇東京,跳到東京頁,再從東京頁跳到大阪頁,其實東京頁和大阪頁都是同一個activity,我們需要從大阪頁點擊返回時,能夠直接回到城市列表頁,這個時候,用singleTop也是能夠很好解決這個問題的。

singleTask

簡介:

如果要激活的那個Activity在任務棧中存在該實例,則不需要創建,只需要把此Activity放入棧頂,并把該Activity以上的Activity實例都pop;


應用
  • 最近在做的,在問題詳情頁,點擊進入回答頁,回答完并finish后,回到問答詳情頁;如果問題詳情頁采用standard方式,將兩次創建問題詳情頁,而采用singleTask則可避免該問題。
  • 例如瀏覽器的主界面。不管從多少個應用啟動瀏覽器,只會啟動主界面一次,其余情況都會走onNewIntent,并且會清空主界面上面的其他頁面。

singleInstance

簡介

這個模式非常接近于singleTask,系統中只允許一個Activity的實例存在。區別在于持有這個Activity的任務中只能有一個Activity:即這個單例本身。

應用
  • 例如鎖屏、電話、鬧鈴提醒,將鬧鈴提醒與鬧鈴設置分離。
  • singleInstance不要用于中間頁面,如果用于中間頁面,跳轉會有問題,比如:A -> B (singleInstance) -> C,完全退出后,在此啟動,首先打開的是B。
  • 如果應用1的任務棧中創建了MainActivity實例,如果應用2也要激活MainActivity,則不需要創建,兩應用共享該Activity實例;


參考

singleInstance模式下的坑
singleInstance作為中間頁的問題
Activity的LaunchMode應用場景思考

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容