組內技術分享-Activity 的啟動模式

sunny185117發表於2019-01-08
時間:2018-01-08週二,上午9:30技術分享
分享主題:Activity 的啟動模式
複製程式碼

模式原因

Activity 的啟動模式是為了解決多個可重複的 Activity 的展示問題。

一個 Activity 即是一個介面。對於一個介面來講,它的展示方式分兩種情況:要麼不復用,比如 Standard ;要麼複用它本身。

複用

複用的話,就涉及到如何複用。一個應用大於等於一個 Activity 的有序集合。既然有序,有的就在開頭的位置,有的在末尾的位置,重要的是裡面可能還會有重複。如果我們要針對這個集合,使用複用的思想的話,可以有兩種思路:一種是把準備複用的 Activity 上面的移除,比如 SingleTask ;一種是準備複用的 Activity 上面不存在任何介面,比如 singleTop 。

SingleTask

對於第一種思路,有兩個好處,一是節省建立 Activity 開支,二是因為只有一個例項,所以介面的資料會保持一致。缺點是,由於要銷燬其上的 Activity 所以使用者能看到明顯的閃動,影響使用者體驗。

singleTop

對於第二種思路,比較常見的場景為,由於網路延遲或者其他cpu呼叫帶來的使用者展示介面的延時,而導致使用者返回點選某一個按鈕,開啟新的 Activity 。在這種情況下,如果使用 singleTop 始終都只會建立一個 Activity 例項。

SingleInstance

到這,你可能認為,多 Activity 介面複用的問題,基本上就解決了。其實不然,為了複用,我們還可以達到新的高度。目前分析的三種情況,都是站在一個集合之內,那麼如果多個 Activity 集合要共享一個介面的話,就需要開拓思路,尋求新的方法,比如 SingleInstance 。可以理解為一個應用,包含多個 Activity 的集合(棧),而其中會有一些集合比較特殊,設定為了SingleInstance 模式後,集合裡只有這一個 Activity。

它的現實場景就是第三方 app 的介面呼叫,比如統一認證,其他 app 呼叫認證客戶的登入介面,就可以採用 SingleInstance 這種跨 app 間的介面共享方式。對於其他app來講,每次都不會產生新的例項。對於 app 內自身來講,由於登入介面是單獨的一個 Activity 棧,所以對於應用中的其他 Activity 介面展示順序也不會造成混亂。

缺點就是切換會消耗資源,介面啟動慢。

相關文章