Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
6da5c341
D
Docs
项目概览
OpenHarmony
/
Docs
大约 1 年 前同步成功
通知
159
Star
292
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
6da5c341
编写于
1月 04, 2023
作者:
zyjhandsome
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
1)优化onNewWant()场景内容;2)指定实例模式启动模式,将原理的描述分开放入到具体的步骤中。
Signed-off-by:
zyjhandsome
<
zyjhandsome@126.com
>
上级
9f1c7a6e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
28 addition
and
29 deletion
+28
-29
zh-cn/application-dev/application-models/uiability-launch-type.md
...plication-dev/application-models/uiability-launch-type.md
+28
-29
未找到文件。
zh-cn/application-dev/application-models/uiability-launch-type.md
浏览文件 @
6da5c341
...
...
@@ -15,15 +15,14 @@ UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态
singleton启动模式为单实例模式,也是默认情况下的启动模式。
每次调用
startAbility(
)方法时,如果应用进程中该类型的UIAbility实例已经存在,则复用系统中的UIAbility实例。系统中只存在唯一一个该UIAbility实例,即在最近任务列表中只存在一个该类型的UIAbility实例。
每次调用
[
startAbility()
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability
)
方法时,如果应用进程中该类型的UIAbility实例已经存在,则复用系统中的UIAbility实例。系统中只存在唯一一个该UIAbility实例,即在最近任务列表中只存在一个该类型的UIAbility实例。
**图1**
单实例模式演示效果
<img
src=
"figures/uiability-launch-type1.png"
alt=
"uiability-launch-type1"
style=
"zoom:5
0%;"
/>
**图1**
单实例模式演示效果
<img
src=
"figures/uiability-launch-type1.png"
alt=
"uiability-launch-type1"
width=
"4
0%;"
/>
> **说明:**
> 应用的UIAbility实例已创建,该UIAbility配置为单实例模式,再次调用startAbility()方法启动该UIAbility实例,此时只会进入该UIAbility的[onNewWant()](../reference/apis/js-apis-app-ability-uiAbility.md#abilityonnewwant)回调,不会进入其onCreate()和onWindowStageCreate()生命周期回调。
> **说明**:应用的UIAbility实例已创建,该UIAbility配置为单实例模式,再次调用[startAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability)方法启动该UIAbility实例。由于启动的还是原来的UIAbility实例,并未重新创建一个新的UIAbility实例,此时只会进入该UIAbility的[onNewWant()](../reference/apis/js-apis-app-ability-uiAbility.md#abilityonnewwant)回调,不会进入其[onCreate()](../reference/apis/js-apis-app-ability-uiAbility.md#uiabilityoncreate)和[onWindowStageCreate()](../reference/apis/js-apis-app-ability-uiAbility.md#uiabilityonwindowstagecreate)生命周期回调。
如果需要使用singleton启动模式,在
[
module.json5配置文件
](
../quick-start/module-configuration-file.md
)
中的
"launchType"字段配置为"singleton"
即可。
如果需要使用singleton启动模式,在
[
module.json5配置文件
](
../quick-start/module-configuration-file.md
)
中的
`launchType`
字段配置为
`singleton`
即可。
```
json
...
...
@@ -43,12 +42,12 @@ singleton启动模式为单实例模式,也是默认情况下的启动模式
## standard启动模式
standard启动模式为标准实例模式,每次调用
startAbility(
)方法时,都会在应用进程中创建一个新的该类型UIAbility实例。即在最近任务列表中可以看到有多个该类型的UIAbility实例。这种情况下可以将UIAbility配置为standard(标准实例模式)。
standard启动模式为标准实例模式,每次调用
[
startAbility()
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability
)
方法时,都会在应用进程中创建一个新的该类型UIAbility实例。即在最近任务列表中可以看到有多个该类型的UIAbility实例。这种情况下可以将UIAbility配置为standard(标准实例模式)。
**图2**
标准实例模式演示效果
<img
src=
"figures/standard-mode.png"
alt=
"standard-mode"
style=
"zoom:5
0%;"
/>
**图2**
标准实例模式演示效果
<img
src=
"figures/standard-mode.png"
alt=
"standard-mode"
width=
"4
0%;"
/>
standard启动模式的开发使用,在
[
module.json5配置文件
](
../quick-start/module-configuration-file.md
)
中的
"launchType"字段配置为"standard"
即可。
standard启动模式的开发使用,在
[
module.json5配置文件
](
../quick-start/module-configuration-file.md
)
中的
`launchType`
字段配置为
`standard`
即可。
```
json
...
...
@@ -70,19 +69,12 @@ standard启动模式的开发使用,在[module.json5配置文件](../quick-sta
specified启动模式为指定实例模式,针对一些特殊场景使用(例如文档应用中每次新建文档希望都能新建一个文档实例,重复打开一个已保存的文档希望打开的都是同一个文档实例)。
在UIAbility实例创建之前,允许开发者为该实例创建一个唯一的字符串Key,创建的UIAbility实例绑定Key之后,后续每次调用startAbility()方法时,都会询问应用使用哪个Key对应的UIAbility实例来响应startAbility()请求。运行时由UIAbility内部业务决定是否创建多实例,如果匹配有该UIAbility实例的Key,则直接拉起与之绑定的UIAbility实例,否则创建一个新的UIAbility实例。
**图3**
指定实例模式演示效果
**图3**
指定实例模式演示效果
<img
src=
"figures/uiability-launch-type2.png"
alt=
"uiability-launch-type2"
style=
"zoom:50%;"
/>
> **说明:**
>
> 1. 应用的UIAbility实例已创建,该UIAbility配置为指定实例模式,再次调用startAbility()方法启动该UIAbility实例,且[AbilityStage](abilitystage.md)的[onAcceptWant()](../reference/apis/js-apis-app-ability-abilityStage.md#abilitystageonacceptwant)回调匹配到一个已创建的UIAbility实例。此时,再次启动该UIAbility时,只会进入该UIAbility的[onNewWant()](../reference/apis/js-apis-app-ability-uiAbility.md#abilityonnewwant)回调,不会进入其onCreate()和onWindowStageCreate()生命周期回调。
> 2. DevEco Studio默认工程中未自动生成AbilityStage,AbilityStage文件的创建请参见[AbilityStage组件容器](abilitystage.md)。
例如有两个UIAbility:EntryAbility和FuncAbility,FuncAbility配置为specified启动模式,需要从EntryAbility的页面中启动FuncAbility。
例如有两个UIAbility:EntryAbility和SpecifiedAbility,SpecifiedAbility配置为specified启动模式,需要从EntryAbility的页面中启动SpecifiedAbility。
1.
在
FuncAbility中,将
[
module.json5配置文件
](
../quick-start/module-configuration-file.md
)
的"launchType"字段配置为"specified"
。
1.
在
SpecifiedAbility中,将
[
module.json5配置文件
](
../quick-start/module-configuration-file.md
)
的
`launchType`
字段配置为
`specified`
。
```
json
{
...
...
@@ -98,7 +90,8 @@ specified启动模式为指定实例模式,针对一些特殊场景使用(
}
```
2.
在EntryAbility中,调用startAbility()方法时,在want参数中,增加一个自定义参数来区别UIAbility实例,例如增加一个"instanceKey"自定义参数。
2.
在UIAbility实例创建之前,允许开发者为该实例创建一个唯一的字符串Key,创建的UIAbility实例绑定Key之后,后续每次调用
[
startAbility()
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability
)
方法时,都会询问应用使用哪个Key对应的UIAbility实例来响应
[
startAbility()
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability
)
请求。
在EntryAbility中,调用
[
startAbility()
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability
)
方法时,在want参数中,增加一个自定义参数来区别UIAbility实例,例如增加一个
`instanceKey`
自定义参数。
```
ts
// 在启动指定实例模式的UIAbility时,给每一个UIAbility实例配置一个独立的Key标识
...
...
@@ -110,7 +103,7 @@ specified启动模式为指定实例模式,针对一些特殊场景使用(
let
want
=
{
deviceId
:
''
,
// deviceId为空表示本设备
bundleName
:
'
com.example.myapplication
'
,
abilityName
:
'
Func
Ability
'
,
abilityName
:
'
Specified
Ability
'
,
moduleName
:
'
module1
'
,
// moduleName非必选
parameters
:
{
// 自定义信息
instanceKey
:
getInstance
(),
...
...
@@ -123,8 +116,9 @@ specified启动模式为指定实例模式,针对一些特殊场景使用(
// ...
})
```
3.
由于FuncAbility的启动模式配置为了指定实例启动模式,在FuncAbility启动之前,会先进入其对应的AbilityStage的
[
onAcceptWant()
](
../reference/apis/js-apis-app-ability-abilityStage.md#abilitystageonacceptwant
)
生命周期回调中,解析传入的want参数,获取"instanceKey"自定义参数。根据业务需要通过AbilityStage的
[
onAcceptWant()
](
../reference/apis/js-apis-app-ability-abilityStage.md#abilitystageonacceptwant
)
生命周期回调返回一个字符串Key标识。
[
如果返回的Key对应一个已启动的UIAbility
](
mission-management-launch-type.md#fig14520125175314
)
,则会将之前的UIAbility拉回前台并获焦,而不创建新的实例,否则创建新的实例并启动。
3.
运行时由UIAbility内部业务决定是否创建多实例,如果匹配有该UIAbility实例的Key,则直接拉起与之绑定的UIAbility实例,否则创建一个新的UIAbility实例。
由于SpecifiedAbility的启动模式配置为了指定实例启动模式,在SpecifiedAbility启动之前,会先进入其对应的AbilityStage的
[
onAcceptWant()
](
../reference/apis/js-apis-app-ability-abilityStage.md#abilitystageonacceptwant
)
生命周期回调中,解析传入的want参数,获取
`instanceKey`
自定义参数。根据业务需要通过AbilityStage的
[
onAcceptWant()
](
../reference/apis/js-apis-app-ability-abilityStage.md#abilitystageonacceptwant
)
生命周期回调返回一个字符串Key标识。
[
如果返回的Key对应一个已启动的UIAbility
](
mission-management-launch-type.md#fig14520125175314
)
,则会将之前的UIAbility拉回前台并获焦,而不创建新的实例,否则创建新的实例并启动。
```
ts
import
AbilityStage
from
'
@ohos.app.ability.AbilityStage
'
;
...
...
@@ -132,19 +126,24 @@ specified启动模式为指定实例模式,针对一些特殊场景使用(
export
default
class
MyAbilityStage
extends
AbilityStage
{
onAcceptWant
(
want
):
string
{
// 在被调用方的AbilityStage中,针对启动模式为specified的UIAbility返回一个UIAbility实例对应的一个Key值
// 当前示例指的是module1 Module的
Func
Ability
if
(
want
.
abilityName
===
'
Func
Ability
'
)
{
// 当前示例指的是module1 Module的
Specified
Ability
if
(
want
.
abilityName
===
'
Specified
Ability
'
)
{
// 返回的字符串Key标识为自定义拼接的字符串内容
return
`
Func
AbilityInstance_
${
want
.
parameters
.
instanceKey
}
`
;
return
`
Specified
AbilityInstance_
${
want
.
parameters
.
instanceKey
}
`
;
}
return
''
;
}
}
```
> **说明:**
>
> 1. 应用的UIAbility实例已创建,该UIAbility配置为指定实例模式,再次调用[startAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability)方法启动该UIAbility实例,且[AbilityStage](../reference/apis/js-apis-app-ability-abilityStage.md)的[onAcceptWant()](../reference/apis/js-apis-app-ability-abilityStage.md#abilitystageonacceptwant)回调匹配到一个已创建的UIAbility实例。由于启动的还是原来的UIAbility实例,并未重新创建一个新的UIAbility实例,此时再次启动该UIAbility时,只会进入该UIAbility的[onNewWant()](../reference/apis/js-apis-app-ability-uiAbility.md#abilityonnewwant)回调,不会进入其[onCreate()](../reference/apis/js-apis-app-ability-uiAbility.md#uiabilityoncreate)和[onWindowStageCreate()](../reference/apis/js-apis-app-ability-uiAbility.md#uiabilityonwindowstagecreate)生命周期回调。
> 2. DevEco Studio默认工程中未自动生成AbilityStage,AbilityStage文件的创建请参见[AbilityStage组件容器](abilitystage.md)。
例如在文档应用中,可以对不同的文档实例内容绑定不同的Key值。当每次新建文档的时候,可以传入不同的新Key值(如可以将文件的路径作为一个Key标识),此时AbilityStage中启动UIAbility时都会创建一个新的UIAbility实例;当新建的文档保存之后,回到桌面,或者新打开一个已保存的文档,回到桌面,此时再次打开该已保存的文档,此时AbilityStage中再次启动该UIAbility时,打开的仍然是之前原来已保存的文档界面。
以如下步骤所示进行举例说明。
1.
打开文件A,对应启动一个新的UIAbility实例,例如启动“UIAbility实例1”。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录