在Page Ability的配置信息(config.json文件)中有一個launchType屬性,經過模板默認生成的值是standard,這是launchType屬性的默認值(能夠不設置launchType,這樣默認值就是standard)。launchType屬性的另一個能夠設置的值是singleton。這兩個屬性值的區別以下:
json
- standard:在任何狀況下,不管Page Ability被顯示多少次,都會建立一個新的Page Ability實例;
- singleton:若是要顯示的Page Ability在棧頂,那麼再次顯示這個Page Ability時,不會再建立新的Page Ability實例,而是直接使用這個Page Ability實例。若是Page Ability上面有其餘的Page Ability,那麼首先彈出這些Page Ability,而後再重用這個Page Ability。總之,擁有singleton模式的Page Ability將永遠使用惟一的實例;
這裏涉及到一個棧的概念,這是HarmonyOS管理Page Ability的模式。HarmonyOS App同時只能顯示一個Page Ability,那麼哪個Page Ability才能顯示呢?HarmonyOS App會使用一個棧來管理App中全部的Page Ability,只有在棧頂的Page Ability纔會顯示。若是要想讓棧中第2個Page Ability顯示,那麼棧頂的Page Ability就必須出棧,也就是銷燬Page Ability,也就是調用terminateAbility方法要完成的工做。
下面用圖示來講明這一過程。圖1中每個矩形區域表示App中當前用於保存Page Ability的棧。1中只有一個Page Ability1,若是讓Page Ability2顯示,那麼Page Ability2必須壓棧,Page Ability3顯示也須要完成一樣的工做。在3的狀態中,若是讓Page Ability2顯示,那麼Page Ability3必須出棧,就造成了4中棧的狀態。
如今假設Page Ability1的launchType屬性值是standard,那麼從Page Ability1中啓動Page Ability1,若是啓動2次,就會再建立兩個Page Ability1實例,這時棧的狀態如圖2所示。ide
很明顯,在棧中有3個Page Ability1實例。
若是Page Ability1的launchType屬性值是singleton,那麼無論顯示多少次Page Ability1,在棧中永遠只有1個Page Ability1實例。因此若是想讓某一個Page Ability1永遠只有一個實例的時候,能夠將該Page Ability的launchType屬性值設爲singleton。post
下面經過一個案例來演示standard和singleton的區別。學習
首先建立一個名爲LaunchTypeAbility的Page Ability,並編寫下面的代碼:spa
文章後續內容和附件能夠點擊下面的原文連接前往學習blog
原文連接:https://harmonyos.51cto.com/posts/2197#bkwz get
想了解更多內容,請訪問:it
51CTO和華爲官方戰略合做共建的鴻蒙技術社區社區
https://harmonyos.51cto.com/#bkwz模板