在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中棧的狀態。
![87c331389eaa77ecbc2658cc911e72ea0cb760.jpg](http://static.javashuo.com/static/loading.gif)
如今假設Page Ability1的launchType屬性值是standard,那麼從Page Ability1中啓動Page Ability1,若是啓動2次,就會再建立兩個Page Ability1實例,這時棧的狀態如圖2所示。ide
![91a256502fc09237d47704fb875fe4411b4a80.jpg](http://static.javashuo.com/static/loading.gif)
很明顯,在棧中有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模板