Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
2484f0ce
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看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
2484f0ce
编写于
9月 01, 2023
作者:
O
openharmony_ci
提交者:
Gitee
9月 01, 2023
浏览文件
操作
浏览文件
下载
差异文件
!23663 应用模型 > 启动UIAbility的指定页面,首次和非首次启动UIAbility,Topic名称优化
Merge pull request !23663 from liuliu/fix0901
上级
62ddf600
17e44d28
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
32 addition
and
28 deletion
+32
-28
zh-cn/application-dev/application-models/figures/uiability-hot-start.png
...on-dev/application-models/figures/uiability-hot-start.png
+0
-0
zh-cn/application-dev/application-models/figures/uiability_not_first_started.png
...pplication-models/figures/uiability_not_first_started.png
+0
-0
zh-cn/application-dev/application-models/uiability-intra-device-interaction.md
.../application-models/uiability-intra-device-interaction.md
+32
-28
未找到文件。
zh-cn/application-dev/application-models/figures/uiability-hot-start.png
0 → 100644
浏览文件 @
2484f0ce
86.0 KB
zh-cn/application-dev/application-models/figures/uiability_not_first_started.png
已删除
100644 → 0
浏览文件 @
62ddf600
84.3 KB
zh-cn/application-dev/application-models/uiability-intra-device-interaction.md
浏览文件 @
2484f0ce
...
@@ -433,7 +433,16 @@ context.startAbility(want, options).then(() => {
...
@@ -433,7 +433,16 @@ context.startAbility(want, options).then(() => {
## 启动UIAbility的指定页面
## 启动UIAbility的指定页面
一个UIAbility可以对应多个页面,在不同的场景下启动该UIAbility时需要展示不同的页面,例如从一个UIAbility的页面中跳转到另外一个UIAbility时,希望启动目标UIAbility的指定页面。本文主要讲解目标UIAbility首次启动和目标UIAbility非首次启动两种启动指定页面的场景,以及在讲解启动指定页面之前会讲解到在调用方如何指定启动页面。
### 概述
一个UIAbility可以对应多个页面,在不同的场景下启动该UIAbility时需要展示不同的页面,例如从一个UIAbility的页面中跳转到另外一个UIAbility时,希望启动目标UIAbility的指定页面。
UIAbility的启动分为两种情况:UIAbility冷启动和UIAbility热启动。
-
UIAbility冷启动:指的是UIAbility实例处于完全关闭状态下被启动,这需要完整地加载和初始化UIAbility实例的代码、资源等。
-
UIAbility热启动:指的是UIAbility实例已经启动并在前台运行过,由于某些原因切换到后台,再次启动该UIAbility实例,这种情况下可以快速恢复UIAbility实例的状态。
本文主要讲解
[
目标UIAbility冷启动
](
#目标uiability冷启动
)
和
[
目标UIAbility热启动
](
#目标uiability热启动
)
两种启动指定页面的场景,以及在讲解启动指定页面之前会讲解到在调用方如何指定启动页面。
### 调用方UIAbility指定启动页面
### 调用方UIAbility指定启动页面
...
@@ -465,9 +474,9 @@ context.startAbility(want).then(() => {
...
@@ -465,9 +474,9 @@ context.startAbility(want).then(() => {
```
```
### 目标UIAbility
首次
启动
### 目标UIAbility
冷
启动
目标UIAbility
首次
启动时,在目标UIAbility的
`onWindowStageCreate()`
生命周期回调中,解析EntryAbility传递过来的want参数,获取到需要加载的页面信息url,传入
`windowStage.loadContent()`
方法。
目标UIAbility
冷
启动时,在目标UIAbility的
`onWindowStageCreate()`
生命周期回调中,解析EntryAbility传递过来的want参数,获取到需要加载的页面信息url,传入
`windowStage.loadContent()`
方法。
```
ts
```
ts
...
@@ -497,7 +506,7 @@ export default class FuncAbility extends UIAbility {
...
@@ -497,7 +506,7 @@ export default class FuncAbility extends UIAbility {
}
}
```
```
### 目标UIAbility
非首次
启动
### 目标UIAbility
热
启动
在应用开发中,会遇到目标UIAbility实例之前已经启动过的场景,这时再次启动目标UIAbility时,不会重新走初始化逻辑,只会直接触发
`onNewWant()`
生命周期方法。为了实现跳转到指定页面,需要在
`onNewWant()`
中解析要参数进行处理。
在应用开发中,会遇到目标UIAbility实例之前已经启动过的场景,这时再次启动目标UIAbility时,不会重新走初始化逻辑,只会直接触发
`onNewWant()`
生命周期方法。为了实现跳转到指定页面,需要在
`onNewWant()`
中解析要参数进行处理。
...
@@ -509,26 +518,12 @@ export default class FuncAbility extends UIAbility {
...
@@ -509,26 +518,12 @@ export default class FuncAbility extends UIAbility {
4.
用户点击联系人张三的短信按钮,会重新启动短信应用的UIAbility实例。
4.
用户点击联系人张三的短信按钮,会重新启动短信应用的UIAbility实例。
5.
由于短信应用的UIAbility实例已经启动过了,此时会触发该UIAbility的
`onNewWant()`
回调,而不会再走
`onCreate()`
和
`onWindowStageCreate()`
等初始化逻辑。
5.
由于短信应用的UIAbility实例已经启动过了,此时会触发该UIAbility的
`onNewWant()`
回调,而不会再走
`onCreate()`
和
`onWindowStageCreate()`
等初始化逻辑。
```
mermaid
图1 目标UIAbility热启动
sequenceDiagram
![](
figures/uiability-hot-start.png
)
Participant U as 用户
Participant S as 短信应用
Participant C as 联系人应用
U->>S: 打开短信应用
S-->>U: 显示短信应用主页
U->>S: 将设备回到桌面界面
S->>S: 短信应用进入后台
U->>C: 打开联系人应用
C-->>U: 显示联系人应用界面
U->>C: 点击联系人张三的短信按钮
C->>S: 构造Want启动短信应用
S-->>U: 显示给张三发短信的页面
```
开发步骤如下所示。
开发步骤如下所示。
1.
首次
启动短信应用的UIAbility实例时,在
`onWindowStageCreate()`
生命周期回调中,通过调用
[
`getUIContext()`
](
../reference/apis/js-apis-window.md#getuicontext10
)
接口获取UI上下文实例
[
`UIContext`
](
../reference/apis/js-apis-arkui-UIContext.md
)
对象。
1.
冷
启动短信应用的UIAbility实例时,在
`onWindowStageCreate()`
生命周期回调中,通过调用
[
`getUIContext()`
](
../reference/apis/js-apis-window.md#getuicontext10
)
接口获取UI上下文实例
[
`UIContext`
](
../reference/apis/js-apis-arkui-UIContext.md
)
对象。
```
ts
```
ts
import
AbilityConstant
from
'
@ohos.app.ability.AbilityConstant
'
;
import
AbilityConstant
from
'
@ohos.app.ability.AbilityConstant
'
;
...
@@ -546,17 +541,26 @@ S-->>U: 显示给张三发短信的页面
...
@@ -546,17 +541,26 @@ S-->>U: 显示给张三发短信的页面
onWindowStageCreate
(
windowStage
:
window
.
WindowStage
)
{
onWindowStageCreate
(
windowStage
:
window
.
WindowStage
)
{
// Main window is created, set main page for this ability
// Main window is created, set main page for this ability
// ...
let
url
=
'
pages/Index
'
;
if
(
this
.
funcAbilityWant
?.
parameters
?.
router
&&
this
.
funcAbilityWant
.
parameters
.
router
===
'
funcA
'
)
{
url
=
'
pages/Second
'
;
}
let
windowClass
:
window
.
Window
;
windowStage
.
loadContent
(
url
,
(
err
,
data
)
=>
{
windowStage
.
getMainWindow
((
err
,
data
)
=>
{
if
(
err
.
code
)
{
if
(
err
.
code
)
{
console
.
error
(
`Failed to obtain the main window. Code is
${
err
.
code
}
, message is
${
err
.
message
}
`
);
return
;
return
;
}
}
windowClass
=
data
;
this
.
uiContext
=
windowClass
.
getUIContext
();
let
windowClass
:
window
.
Window
;
})
windowStage
.
getMainWindow
((
err
,
data
)
=>
{
if
(
err
.
code
)
{
console
.
error
(
`Failed to obtain the main window. Code is
${
err
.
code
}
, message is
${
err
.
message
}
`
);
return
;
}
windowClass
=
data
;
this
.
uiContext
=
windowClass
.
getUIContext
();
})
});
}
}
}
}
```
```
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录