HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第33天,UIAbility组件启动模式
HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第33天,UIAbility组件启动模式 1、UIAbility组件启动模式
UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了三种启动模式:
2、singleton启动模式
singleton启动模式为单实例模式,也是默认情况下的启动模式。
每次调用startAbility()方法时,如果应用进程中该类型的UIAbility实例已经存在,则复用系统中的UIAbility实例。系统中只存在唯一一个该UIAbility实例,
即在最近任务列表中只存在一个该类型的UIAbility实例。
图1 单实例模式演示效果
说明
应用的UIAbility实例已创建,该UIAbility配置为单实例模式,再次调用startAbility()方法启动该UIAbility实例,此时只会进入该UIAbility的onNewWant()回调,
不会进入其onCreate()和onWindowStageCreate()生命周期回调。
如果需要使用singleton启动模式,在module.json5配置文件中的"launchType"字段配置为"singleton"即可。
3、multiton启动模式
multiton启动模式为多实例模式,每次调用startAbility()方法时,都会在应用进程中创建一个新的该类型UIAbility实例。
即在最近任务列表中可以看到有多个该类型的UIAbility实例。这种情况下可以将UIAbility配置为multiton(多实例模式)。
图2 多实例模式演示效果
说明
应用的UIAbility实例已创建,该UIAbility配置为多实例模式,再次调用startAbility()方法启动该UIAbility实例,此时只会创建一个新的UIAbility实例。
如果需要使用multiton启动模式,在module.json5配置文件中的"launchType"字段配置为"multiton"即可。
4、specified启动模式
specified启动模式为指定实例模式,针对一些特殊场景使用(例如文档应用中每次新建文档希望都能新建一个文档实例,
重复打开一个已保存的文档希望打开的都是同一个文档实例)。
在UIAbility实例创建之前,允许开发者为该实例创建一个唯一的字符串Key,创建的UIAbility实例绑定Key之后,后续每次调用startAbility()方法时,都会询问应用使用哪个Key对应的UIAbility实例来响应startAbility()请求。运行时由UIAbility内部业务决定是否创建多实例,如果匹配有该UIAbility实例的Key,则直接拉起与之绑定的UIAbility实例,否则创建一个新的UIAbility实例。
图3 指定实例模式演示效果
说明
应用的UIAbility实例已创建,该UIAbility配置为指定实例模式,再次调用startAbility()方法启动该UIAbility实例,且AbilityStage的onAcceptWant()回调匹配到
一个已创建的UIAbility实例。此时,再次启动该UIAbility时,只会进入该UIAbility的onNewWant()回调,不会进入其onCreate()和onWindowStageCreate()生命周期回调。
例如有两个UIAbility:EntryAbility和FuncAbility,FuncAbility配置为specified启动模式,需要从EntryAbility的页面中启动FuncAbility。
2.在EntryAbility中,调用startAbility()方法时,在want参数中,增加一个自定义参数来区别UIAbility实例,例如增加一个"instanceKey"自定义参数。
3.由于FuncAbility的启动模式配置为了指定实例启动模式,在FuncAbility启动之前,会先进入其对应的AbilityStage的onAcceptWant()生命周期回调中,
解析传入的want参数,获取"instanceKey"自定义参数。根据业务需要通过AbilityStage的onAcceptWant()生命周期回调返回一个字符串Key标识。
如果返回的Key对应一个已启动的UIAbility,则会将之前的UIAbility拉回前台并获焦,而不创建新的实例,否则创建新的实例并启动。
例如在文档应用中,可以对不同的文档实例内容绑定不同的Key值。当每次新建文档的时候,可以传入不同的新Key值(如可以将文件的路径作为一个Key标识),此时AbilityStage中启动UIAbility时都会创建一个新的UIAbility实例;当新建的文档保存之后,回到桌面,或者新打开一个已保存的文档,回到桌面,此时再次打开该已保存的文档,此时AbilityStage中再次启动该UIAbility时,打开的仍然是之前原来已保存的文档界面。
以如下步骤所示进行举例说明。
- 打开文件A,对应启动一个新的UIAbility实例,例如启动“UIAbility实例1”。
- 在最近任务列表中关闭文件A的进程,此时UIAbility实例1被销毁,回到桌面,再次打开文件A,此时对应启动一个新的UIAbility实例,例如启动“UIAbility实例2”。
- 回到桌面,打开文件B,此时对应启动一个新的UIAbility实例,例如启动“UIAbility实例3”。
- 回到桌面,再次打开文件A,此时对应启动的还是之前的“UIAbility实例2”。
更多关于HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第33天,UIAbility组件启动模式的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS中,UIAbility组件的启动模式决定了UIAbility实例的创建和复用方式。鸿蒙Next的ArkTS语言支持以下几种UIAbility启动模式:
-
Standard(标准模式):每次启动UIAbility时都会创建一个新的实例,适用于需要独立运行的场景。
-
SingleTop(栈顶复用模式):如果UIAbility已经位于任务栈的顶部,则不会创建新的实例,而是复用现有的实例,并调用其
onNewIntent
方法。如果不在栈顶,则创建新实例。 -
SingleTask(单任务模式):UIAbility在任务栈中只会存在一个实例。如果启动时任务栈中已有该UIAbility的实例,则复用该实例,并调用其
onNewIntent
方法,同时清除栈顶到该实例之间的所有其他UIAbility。如果不存在,则创建新实例。 -
SingleInstance(单实例模式):UIAbility在整个系统中只会存在一个实例,且该实例会运行在独立的任务栈中。如果启动时已有该UIAbility的实例,则复用该实例,并调用其
onNewIntent
方法。如果不存在,则创建新实例。
在ArkTS中,可以通过在config.json
文件中配置launchType
属性来指定UIAbility的启动模式。例如:
{
"module": {
"abilities": [
{
"name": ".MainAbility",
"launchType": "standard"
}
]
}
}
启动模式的选择应根据具体业务需求来决定,以确保UIAbility的行为符合预期。
更多关于HarmonyOS 鸿蒙Next ArkTS语言教程入门学习第33天,UIAbility组件启动模式的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS的ArkTS语言中,UIAbility组件的启动模式决定了其生命周期和实例管理方式。常见的启动模式包括:
- Standard(标准模式):每次启动都会创建一个新的UIAbility实例,适用于需要独立运行的场景。
- SingleTop(单顶模式):如果UIAbility已经在栈顶,则不会创建新实例,而是复用现有实例,适用于避免重复启动的场景。
- SingleTask(单任务模式):UIAbility在任务栈中只存在一个实例,启动时会复用该实例并清除其上的其他UIAbility,适用于需要独占任务的场景。
- SingleInstance(单实例模式):UIAbility在整个系统中只存在一个实例,适用于全局唯一性的场景。
选择合适的启动模式可以优化应用性能和用户体验。