在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模板