Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
9698f5ad
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,发现更多精彩内容 >>
提交
9698f5ad
编写于
2月 21, 2023
作者:
M
mingxihua
提交者:
Gitee
2月 21, 2023
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of gitee.com:openharmony/docs into master
Signed-off-by:
N
mingxihua
<
mingxihua@huawei.com
>
上级
b9caf0e6
1b1b3c26
变更
10
展开全部
隐藏空白更改
内联
并排
Showing
10 changed file
with
782 addition
and
755 deletion
+782
-755
zh-cn/application-dev/application-models/application-context-stage.md
...ation-dev/application-models/application-context-stage.md
+2
-2
zh-cn/application-dev/application-models/serviceextensionability.md
...ication-dev/application-models/serviceextensionability.md
+2
-2
zh-cn/application-dev/application-models/uiability-data-sync-with-ui.md
...ion-dev/application-models/uiability-data-sync-with-ui.md
+38
-36
zh-cn/application-dev/application-models/uiability-intra-device-interaction.md
.../application-models/uiability-intra-device-interaction.md
+4
-4
zh-cn/application-dev/application-models/want-overview.md
zh-cn/application-dev/application-models/want-overview.md
+8
-7
zh-cn/application-dev/quick-start/module-configuration-file.md
.../application-dev/quick-start/module-configuration-file.md
+5
-1
zh-cn/application-dev/reference/apis/js-apis-app-ability-want.md
...pplication-dev/reference/apis/js-apis-app-ability-want.md
+80
-62
zh-cn/application-dev/reference/apis/js-apis-inner-application-errorObserver.md
...reference/apis/js-apis-inner-application-errorObserver.md
+3
-3
zh-cn/application-dev/reference/apis/js-apis-inner-application-uiAbilityContext.md
...erence/apis/js-apis-inner-application-uiAbilityContext.md
+639
-637
zh-cn/application-dev/windowmanager/application-window-stage.md
...application-dev/windowmanager/application-window-stage.md
+1
-1
未找到文件。
zh-cn/application-dev/application-models/application-context-stage.md
浏览文件 @
9698f5ad
...
...
@@ -14,7 +14,7 @@
!
[
context-holding
](
figures/context-holding.png
)
-
各类Context的获取方式
-
获取
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
。每个UIAbility中都包含了一个Context属性,提供操作
Ability、获取Ability
的配置信息等能力。
-
获取
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
。每个UIAbility中都包含了一个Context属性,提供操作
应用组件、获取应用组件
的配置信息等能力。
```
ts
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
;
...
...
@@ -51,7 +51,7 @@
}
}
```
-
获取
[
ApplicationContext
](
../reference/apis/js-apis-inner-application-applicationContext.md
)
。应用级别的Context。ApplicationContext在基类Context的基础上提供了订阅应用内
Ability
的生命周期的变化、订阅系统内存变化和订阅应用内系统环境的变化的能力,在UIAbility、ExtensionAbility、AbilityStage中均可以获取。
-
获取
[
ApplicationContext
](
../reference/apis/js-apis-inner-application-applicationContext.md
)
。应用级别的Context。ApplicationContext在基类Context的基础上提供了订阅应用内
应用组件
的生命周期的变化、订阅系统内存变化和订阅应用内系统环境的变化的能力,在UIAbility、ExtensionAbility、AbilityStage中均可以获取。
```
ts
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
;
...
...
zh-cn/application-dev/application-models/serviceextensionability.md
浏览文件 @
9698f5ad
...
...
@@ -165,7 +165,7 @@
> **说明:**
> ServiceExtensionContext的[startServiceExtensionAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#abilitycontextstartserviceextensionability)、[stopServiceExtensionAbility()](../reference/apis/js-apis-inner-application-uiAbilityContext.md#abilitycontextstopserviceextensionability)和[terminateSelf()](../reference/apis/js-apis-inner-application-serviceExtensionContext.md#serviceextensioncontextterminateself)为系统接口,三方应用不支持调用。
1.
在系统应用中启动一个新的ServiceExtensionAbility。示例中的context的获取方式
参见
[
获取UIAbility的Context属性
](
uiability-usage.md#获取uiability的上下文信息
)
。
1.
在系统应用中启动一个新的ServiceExtensionAbility。示例中的context的获取方式
请参见
[
获取UIAbility的上下文信息
](
uiability-usage.md#获取uiability的上下文信息
)
。
```
ts
let
want
=
{
...
...
@@ -223,7 +223,7 @@
ServiceExtensionAbility服务组件在
[
onConnect()
](
../reference/apis/js-apis-app-ability-serviceExtensionAbility.md#serviceextensionabilityonconnect
)
中返回IRemoteObject对象,开发者通过该IRemoteObject定义通信接口,用于客户端与服务端进行RPC交互。多个客户端可以同时连接到同一个后台服务,客户端完成与服务的交互后,客户端需要通过调用
[
disconnectServiceExtensionAbility()
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#abilitycontextdisconnectserviceextensionability
)
来断开连接。如果所有连接到某个后台服务的客户端均已断开连接,则系统会销毁该服务。
-
使用connectServiceExtensionAbility()建立与后台服务的连接。示例中的context的获取方式
参见
[
获取UIAbility的Context属性
](
uiability-usage.md#获取uiability的上下文信息
)
。
-
使用connectServiceExtensionAbility()建立与后台服务的连接。示例中的context的获取方式
请参见
[
获取UIAbility的上下文信息
](
uiability-usage.md#获取uiability的上下文信息
)
。
```
ts
import
rpc
from
'
@ohos.rpc
'
;
...
...
zh-cn/application-dev/application-models/uiability-data-sync-with-ui.md
浏览文件 @
9698f5ad
# UIAbility组件与UI的数据同步
基于OpenHarmony的应用模型,可以通过以下
三
种方式来实现UIAbility组件与UI之间的数据同步。
基于OpenHarmony的应用模型,可以通过以下
几
种方式来实现UIAbility组件与UI之间的数据同步。
-
EventHub:
[
基类Context
](
application-context-stage.md
)
提供了EventHub的能力,通过发布订阅方式来实现。事件需要先订阅后发布,订阅者收到消息后进行处理。
-
globalThis:ArkTS引擎实例内部的一个全局对象,在ArkTS引擎实例内部都能访问。
-
LocalStorage/AppStorage:参见
[
应用级变量的状态管理
](
../quick-start/arkts-state-mgmt-application-level.md
)
。
-
[
使用EventHub进行数据通信
](
#使用eventhub进行数据通信
)
:在基类Context中提供了EventHub对象,可以通过发布订阅方式来实现事件的传递。在事件传递前,订阅者需要先进行订阅,当发布者发布事件时,订阅者将接收到事件并进行相应处理。
-
[
使用globalThis进行数据同步
](
#使用globalthis进行数据同步
)
:在ArkTS引擎实例内部,globalThis是一个全局对象,可以被UIAbility、ExtensionAbility、Page等组件访问。
-
[
使用AppStorage/LocalStorage进行数据同步
](
#使用appstorage/localstorage进行数据同步
)
:ArkUI提供了AppStorage和LocalStorage两种应用级别的状态管理方案,可用于实现应用级别和UIAbility级别的数据同步。
## 使用EventHub进行数据通信
[
EventHub
](
../reference/apis/js-apis-inner-application-eventHub.md
)
提供了UIAbility组件/ExtensionAbility组件级别的事件机制,以UIAbility组件/ExtensionAbility组件为中心提供了订阅、取消订阅和触发事件的
数据通信能力。
[
EventHub
](
../reference/apis/js-apis-inner-application-eventHub.md
)
为UIAbility组件/ExtensionAbility组件提供了事件机制,使它们能够进行订阅、取消订阅和触发事件等
数据通信能力。
[
基类Context
](
application-context-stage.md
)
提供了EventHub对象,在使用EventHub之前,首先需要获取EventHub对象。本章节以使用EventHub实现UIAbility与UI之间的数据通信
为例进行说明。
在
[
基类Context
](
application-context-stage.md
)
中,提供了EventHub对象,使用EventHub实现UIAbility与UI之间的数据通信需要先获取EventHub对象。本章节将以此
为例进行说明。
1.
在UIAbility中调用
[
eventHub.on()
](
../reference/apis/js-apis-inner-application-eventHub.md#eventhubon
)
方法注册一个自定义事件“event1”,
[
eventHub.on()
](
../reference/apis/js-apis-inner-application-eventHub.md#eventhubon
)
有如下两种调用方式,使用其中一种即可。
...
...
@@ -88,8 +87,7 @@
## 使用globalThis进行数据同步
globalThis是ArkTS引擎实例内部的一个全局对象,引擎内部的UIAbility/ExtensionAbility/Page都可以使用,因此可以使用globalThis全局对象进行数据同步。
globalThis是
[
ArkTS引擎实例
](
thread-model-stage.md
)
内部的一个全局对象,引擎内部的UIAbility/ExtensionAbility/Page都可以使用,因此可以使用globalThis对象进行数据同步。
**图1**
使用globalThis进行数据同步
...
...
@@ -105,7 +103,7 @@ globalThis是ArkTS引擎实例内部的一个全局对象,引擎内部的UIAbi
### UIAbility和Page之间使用globalThis
globalThis为
[
ArkTS引擎实例
](
thread-model-stage.md
)
下的全局对象,可以通过globalThis绑定属性/方法来进行UIAbility组件与UI
的数据同步。例如在UIAbility组件中绑定want参数,即可在UIAbility对应的UI界面上使用want参数信息。
通过在globalThis对象上绑定属性/方法,可以实现UIAbility组件与UI之间
的数据同步。例如在UIAbility组件中绑定want参数,即可在UIAbility对应的UI界面上使用want参数信息。
1.
调用
[
startAbility()
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability
)
方法启动一个UIAbility实例时,被启动的UIAbility创建完成后会进入onCreate()生命周期回调,且在onCreate()生命周期回调中能够接受到传递过来的want参数,可以将want参数绑定到globalThis上。
...
...
@@ -144,29 +142,29 @@ globalThis为[ArkTS引擎实例](thread-model-stage.md)下的全局对象,可
### UIAbility和UIAbility之间使用globalThis
同一个应用中UIAbility和UIAbility之间的数据传递,可以通过将数据绑定到全局变量globalThis上进行同步,如在AbilityA中将数据保存在globalThis,然后跳转到AbilityB中取得该数据:
在同一个应用中,UIAbility与UIAbility之间的数据传递可以通过将数据绑定到全局变量globalThis上进行同步。例如,在UIAbilityA中将数据保存在globalThis对象中,然后跳转到UIAbilityB中就可以获取该数据。
1.
AbilityA中保存数据一个字符串数据并挂载到globalThis上。
1.
UI
AbilityA中保存数据一个字符串数据并挂载到globalThis上。
```
ts
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
export
default
class
AbilityA
extends
UIAbility
{
export
default
class
UI
AbilityA
extends
UIAbility
{
onCreate
(
want
,
launch
)
{
globalThis
.
entryAbilityStr
=
'
AbilityA
'
;
// AbilityA存放字符串“
AbilityA”到globalThis
globalThis
.
entryAbilityStr
=
'
UIAbilityA
'
;
// UIAbilityA存放字符串“UI
AbilityA”到globalThis
// ...
}
}
```
2.
AbilityB中获取对应的数据。
2.
UI
AbilityB中获取对应的数据。
```
ts
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
export
default
class
AbilityB
extends
UIAbility
{
export
default
class
UI
AbilityB
extends
UIAbility
{
onCreate
(
want
,
launch
)
{
// AbilityB从globalThis读取name并输出
//
UI
AbilityB从globalThis读取name并输出
console
.
info
(
'
name from entryAbilityStr:
'
+
globalThis
.
entryAbilityStr
);
// ...
}
...
...
@@ -176,17 +174,17 @@ globalThis为[ArkTS引擎实例](thread-model-stage.md)下的全局对象,可
### UIAbility和ExtensionAbility之间使用globalThis
同一个应用中UIAbility和ExtensionAbility之间的数据传递,也可以通过将数据绑定到全局变量globalThis上进行同步,如在AbilityA中保存数据,在ServiceExtensionAbility中获取
数据。
在同一个应用中,UIAbility和ExtensionAbility之间的数据传递也可以通过将数据绑定到全局变量globalThis上进行同步。例如,在UIAbilityA中保存数据,在ServiceExtensionAbility中就可以获取该
数据。
1.
AbilityA中保存数据一个字符串数据并挂载到globalThis上。
1.
UI
AbilityA中保存数据一个字符串数据并挂载到globalThis上。
```
ts
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
export
default
class
AbilityA
extends
UIAbility
{
export
default
class
UI
AbilityA
extends
UIAbility
{
onCreate
(
want
,
launch
)
{
//
AbilityA存放字符串“
AbilityA”到globalThis
globalThis
.
entryAbilityStr
=
'
AbilityA
'
;
//
UIAbilityA存放字符串“UI
AbilityA”到globalThis
globalThis
.
entryAbilityStr
=
'
UI
AbilityA
'
;
// ...
}
}
...
...
@@ -213,7 +211,7 @@ globalThis为[ArkTS引擎实例](thread-model-stage.md)下的全局对象,可
![
globalThis2
](
figures/globalThis2.png
)
-
Stage模型下进程内的UIAbility组件共享ArkTS引擎实例,使用globalThis时需要避免存放相同名称的对象。例如
AbilityA和
AbilityB可以使用globalThis共享数据,在存放相同名称的对象时,先存放的对象会被后存放的对象覆盖。
-
Stage模型下进程内的UIAbility组件共享ArkTS引擎实例,使用globalThis时需要避免存放相同名称的对象。例如
UIAbilityA和UI
AbilityB可以使用globalThis共享数据,在存放相同名称的对象时,先存放的对象会被后存放的对象覆盖。
-
FA模型因为每个UIAbility组件之间引擎隔离,不会存在该问题。
...
...
@@ -221,20 +219,20 @@ globalThis为[ArkTS引擎实例](thread-model-stage.md)下的全局对象,可
Stage模型上同名对象覆盖导致问题的场景举例说明。
1.
在AbilityA文件中使用globalThis中存放了
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
。
1.
在
UI
AbilityA文件中使用globalThis中存放了
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
。
```
ts
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
export
default
class
AbilityA
extends
UIAbility
{
export
default
class
UI
AbilityA
extends
UIAbility
{
onCreate
(
want
,
launch
)
{
globalThis
.
context
=
this
.
context
;
// AbilityA存放context到globalThis
globalThis
.
context
=
this
.
context
;
//
UI
AbilityA存放context到globalThis
// ...
}
}
```
2.
在
AbilityA的页面中获取该
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
并进行使用。使用完成后将
AbilityA实例切换至后台。
2.
在
UIAbilityA的页面中获取该
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
并进行使用。使用完成后将UI
AbilityA实例切换至后台。
```
ts
@
Entry
...
...
@@ -254,21 +252,21 @@ Stage模型上同名对象覆盖导致问题的场景举例说明。
}
```
3.
在AbilityB文件中使用globalThis中存放了
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
,并且命名为相同的名称。
3.
在
UI
AbilityB文件中使用globalThis中存放了
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
,并且命名为相同的名称。
```
ts
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
export
default
class
AbilityB
extends
UIAbility
{
export
default
class
UI
AbilityB
extends
UIAbility
{
onCreate
(
want
,
launch
)
{
//
AbilityB覆盖了
AbilityA在globalThis中存放的context
//
UIAbilityB覆盖了UI
AbilityA在globalThis中存放的context
globalThis
.
context
=
this
.
context
;
// ...
}
}
```
4.
在
AbilityB的页面中获取该
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
并进行使用。此时获取到的globalThis.context已经表示为
AbilityB中赋值的
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
内容。
4.
在
UIAbilityB的页面中获取该
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
并进行使用。此时获取到的globalThis.context已经表示为UI
AbilityB中赋值的
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
内容。
```
ts
@
Entry
...
...
@@ -288,27 +286,27 @@ Stage模型上同名对象覆盖导致问题的场景举例说明。
}
```
5.
在
AbilityB实例切换至后台,将AbilityA实例从后台切换回到前台。此时
AbilityA的onCreate生命周期不会再次进入。
5.
在
UIAbilityB实例切换至后台,将UIAbilityA实例从后台切换回到前台。此时UI
AbilityA的onCreate生命周期不会再次进入。
```
ts
import
UIAbility
from
'
@ohos.app.ability.UIAbility
'
export
default
class
AbilityA
extends
UIAbility
{
onCreate
(
want
,
launch
)
{
// AbilityA从后台进入前台,不会再走这个生命周期
export
default
class
UI
AbilityA
extends
UIAbility
{
onCreate
(
want
,
launch
)
{
//
UI
AbilityA从后台进入前台,不会再走这个生命周期
globalThis
.
context
=
this
.
context
;
// ...
}
}
```
6.
在
AbilityA的页面再次回到前台时,其获取到的globalThis.context表示的为AbilityB的
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
,而不是AbilityA的
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
,在
AbilityA的页面中使用则会出错。
6.
在
UIAbilityA的页面再次回到前台时,其获取到的globalThis.context表示的为UIAbilityB的
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
,而不是UIAbilityA的
[
UIAbilityContext
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md
)
,在UI
AbilityA的页面中使用则会出错。
```
ts
@
Entry
@
Component
struct
Index
{
onPageShow
()
{
let
ctx
=
globalThis
.
context
;
// 这时候globalThis中的context是AbilityB的context
let
ctx
=
globalThis
.
context
;
// 这时候globalThis中的context是
UI
AbilityB的context
let
permissions
=
[
'
com.example.permission
'
];
ctx
.
requestPermissionsFromUser
(
permissions
,(
result
)
=>
{
// 使用这个对象就会导致进程崩溃
console
.
info
(
'
requestPermissionsFromUser result:
'
+
JSON
.
stringify
(
result
));
...
...
@@ -320,3 +318,7 @@ Stage模型上同名对象覆盖导致问题的场景举例说明。
}
}
```
## 使用AppStorage/LocalStorage进行数据同步
ArkUI提供了AppStorage和LocalStorage两种应用级别的状态管理方案,可用于实现应用级别和UIAbility级别的数据同步。使用这些方案可以方便地管理应用状态,提高应用性能和用户体验。其中,AppStorage是一个全局的状态管理器,适用于多个UIAbility共享同一状态数据的情况;而LocalStorage则是一个局部的状态管理器,适用于单个UIAbility内部使用的状态数据。通过这两种方案,开发者可以更加灵活地控制应用状态,提高应用的可维护性和可扩展性。详细请参见
[
应用级变量的状态管理
](
../quick-start/arkts-state-mgmt-application-level.md
)
。
zh-cn/application-dev/application-models/uiability-intra-device-interaction.md
浏览文件 @
9698f5ad
...
...
@@ -26,7 +26,7 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳
假设应用中有两个UIAbility:EntryAbility和FuncAbility(可以在应用的一个Module中,也可以在的不同Module中),需要从EntryAbility的页面中启动FuncAbility。
1.
在EntryAbility中,通过调用
[
startAbility()
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability
)
方法启动UIAbility,
[
want
](
../reference/apis/js-apis-app-ability-want.md
)
为UIAbility实例启动的入口参数,其中bundleName为待启动应用的Bundle名称,abilityName为待启动的Ability名称,moduleName在待启动的UIAbility属于不同的Module时添加,parameters为自定义信息参数。示例中的context的获取方式
参见
[
获取UIAbility的Context属性
](
uiability-usage.md#获取uiability的上下文信息
)
。
1.
在EntryAbility中,通过调用
[
startAbility()
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability
)
方法启动UIAbility,
[
want
](
../reference/apis/js-apis-app-ability-want.md
)
为UIAbility实例启动的入口参数,其中bundleName为待启动应用的Bundle名称,abilityName为待启动的Ability名称,moduleName在待启动的UIAbility属于不同的Module时添加,parameters为自定义信息参数。示例中的context的获取方式
请参见
[
获取UIAbility的上下文信息
](
uiability-usage.md#获取uiability的上下文信息
)
。
```
ts
let
wantInfo
=
{
...
...
@@ -82,7 +82,7 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳
在一个EntryAbility启动另外一个FuncAbility时,希望在被启动的FuncAbility完成相关业务后,能将结果返回给调用方。例如在应用中将入口功能和帐号登录功能分别设计为两个独立的UIAbility,在帐号登录UIAbility中完成登录操作后,需要将登录的结果返回给入口UIAbility。
1.
在EntryAbility中,调用
[
startAbilityForResult()
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextterminateselfwithresult
)
接口启动FuncAbility,异步回调中的data用于接收FuncAbility停止自身后返回给EntryAbility的信息。示例中的context的获取方式
参见
[
获取UIAbility的Context属性
](
uiability-usage.md#获取uiability的上下文信息
)
。
1.
在EntryAbility中,调用
[
startAbilityForResult()
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextterminateselfwithresult
)
接口启动FuncAbility,异步回调中的data用于接收FuncAbility停止自身后返回给EntryAbility的信息。示例中的context的获取方式
请参见
[
获取UIAbility的上下文信息
](
uiability-usage.md#获取uiability的上下文信息
)
。
```
ts
let
wantInfo
=
{
...
...
@@ -181,7 +181,7 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳
}
```
2.
在调用方want参数中的entities和action需要被包含在待匹配UIAbility的skills配置的entities和actions中。系统匹配到符合entities和actions参数条件的UIAbility后,会弹出选择框展示匹配到的UIAbility实例列表供用户选择使用。示例中的context的获取方式
参见
[
获取UIAbility的Context属性
](
uiability-usage.md#获取uiability的上下文信息
)
。
2.
在调用方want参数中的entities和action需要被包含在待匹配UIAbility的skills配置的entities和actions中。系统匹配到符合entities和actions参数条件的UIAbility后,会弹出选择框展示匹配到的UIAbility实例列表供用户选择使用。示例中的context的获取方式
请参见
[
获取UIAbility的上下文信息
](
uiability-usage.md#获取uiability的上下文信息
)
。
```
ts
let
wantInfo
=
{
...
...
@@ -315,7 +315,7 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳
### 调用方UIAbility指定启动页面
调用方UIAbility启动另外一个UIAbility时,通常需要跳转到指定的页面。例如FuncAbility包含两个页面(Index对应首页,Second对应功能A页面),此时需要在传入的want参数中配置指定的页面路径信息,可以通过want中的parameters参数增加一个自定义参数传递页面跳转信息。示例中的context的获取方式
参见
[
获取UIAbility的Context属性
](
uiability-usage.md#获取uiability的上下文信息
)
。
调用方UIAbility启动另外一个UIAbility时,通常需要跳转到指定的页面。例如FuncAbility包含两个页面(Index对应首页,Second对应功能A页面),此时需要在传入的want参数中配置指定的页面路径信息,可以通过want中的parameters参数增加一个自定义参数传递页面跳转信息。示例中的context的获取方式
请参见
[
获取UIAbility的上下文信息
](
uiability-usage.md#获取uiability的上下文信息
)
。
```
ts
...
...
zh-cn/application-dev/application-models/want-overview.md
浏览文件 @
9698f5ad
...
...
@@ -3,17 +3,18 @@
## Want的定义与用途
[
Want
](
../reference/apis/js-apis-app-ability-want.md
)
是
对象间信息传递的载体,可以用于应用组件间的信息传递。其使用场景之一是作为
[
startAbility()
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability
)
的参数,包含了指定的启动目标以及启动时需携带的相关数据,如bundleName和abilityName字段分别指明目标Ability所在应用的Bundle名称以及对应包内的Ability名称。当UIAbilityA启动UIAbilityB并需要传入一些数据给UIAbilityB时,Want可以作为一个载体将数据传给UIAbilityB
。
[
Want
](
../reference/apis/js-apis-app-ability-want.md
)
是
一种对象,用于在应用组件之间传递信息
。
**图1**
Want用法示意
其中,一种常见的使用场景是作为
[
startAbility()
](
../reference/apis/js-apis-inner-application-uiAbilityContext.md#uiabilitycontextstartability
)
方法的参数。例如,当UIAbilityA需要启动UIAbilityB并向UIAbilityB传递一些数据时,可以使用Want作为一个载体,将数据传递给UIAbilityB。
!
[
usage-of-want
](
figures/usage-of-want.png
)
**图1**
Want用法示意
![
usage-of-want
](
figures/usage-of-want.png
)
## Want的类型
-
**显式Want**
:在启动Ability时
指定了abilityName和bundleName的Want
称为显式Want。
当有明确处理请求的对象时,通过提供目标Ability所在应用的Bundle名称信息(bundleName),并在Want内指定abilityName便可启动目标Ability。显式Want通常用于在当前应用开发中启动某个已知的Ability
。
-
**显式Want**
:在启动Ability时
,如果指定了abilityName和bundleName,则
称为显式Want。
显式Want通常用于在当前应用中启动已知的目标Ability,通过提供目标Ability所在应用的Bundle名称信息(bundleName)并在Want对象内指定abilityName来启动目标Ability。当有明确处理请求的对象时,显式Want是一种简单有效的启动目标Ability的方式
。
```
ts
let
wantInfo
=
{
...
...
@@ -23,8 +24,8 @@
}
```
-
**隐式Want**
:在启动Ability时
未指定abilityName的Want
称为隐式Want。
当
请求处理的对象不明确时,希望在当前应用中使用其他应用提供的某个能力(通过
[
skills标签
](
../quick-start/module-configuration-file.md#skills标签
)
定义),而不关心提供该能力的具体应用,可以使用隐式Want。例如使用隐式Want描述需要打开一个链接的请求,而不关心通过具体哪个应用打开,系统将匹配声明支持该请求的所有应用
。
-
**隐式Want**
:在启动Ability时
,如果未指定abilityName,则
称为隐式Want。
当
需要处理的对象不明确时,可以使用隐式Want,在当前应用中使用其他应用提供的某个能力,而不关心提供该能力的具体应用。隐式Want使用
[
skills标签
](
../quick-start/module-configuration-file.md#skills标签
)
来定义需要使用的能力,并由系统匹配声明支持该请求的所有应用来处理请求。例如,需要打开一个链接的请求,系统将匹配所有声明支持该请求的应用,然后让用户选择使用哪个应用打开链接
。
```
ts
...
...
zh-cn/application-dev/quick-start/module-configuration-file.md
浏览文件 @
9698f5ad
...
...
@@ -395,7 +395,11 @@ extensionAbilities示例:
该标签标识应用运行时需向系统申请的权限集合。
**表8**
**requestPermissions标签说明**
> **说明:**
>
> 在requestPermissions标签中配置的权限项将在应用级别生效,即该权限适用于整个应用程序。
**表8**
**requestPermissions标签说明**
| 属性 | 含义 | 类型 | 取值范围 | 默认值 |
| -------- | -------- | -------- | -------- | -------- |
...
...
zh-cn/application-dev/reference/apis/js-apis-app-ability-want.md
浏览文件 @
9698f5ad
# @ohos.app.ability.Want (Want)
Want是对象间信息传递的载体
, 可以用于应用组件间的信息传递。 Want的使用场景之一是作为startAbility的参数, 其包含了指定的启动目标, 以及启动时需携带的相关数据, 如bundleName和abilityName字段分别指明目标Ability所在应用的包名以及对应包内的Ability名称。当UIAbilityA需要启动UIAbilityB并传入一些数据时,
可使用Want作为载体将这些数据传递给UIAbilityB。
Want是对象间信息传递的载体
,可以用于应用组件间的信息传递。Want的使用场景之一是作为startAbility的参数,其包含了指定的启动目标,以及启动时需携带的相关数据,例如bundleName和abilityName字段分别指明目标Ability所在应用的包名以及对应包内的Ability名称。当UIAbilityA需要启动UIAbilityB并传入一些数据时,
可使用Want作为载体将这些数据传递给UIAbilityB。
> **说明:**
>
...
...
@@ -22,8 +22,8 @@ import Want from '@ohos.app.ability.Want';
| bundleName | string | 否 | 表示待启动Ability所在的应用Bundle名称。 |
| moduleName | string | 否 | 表示待启动的Ability所属的模块名称。 |
| abilityName | string | 否 | 表示待启动Ability名称。如果在Want中该字段同时指定了BundleName和AbilityName,则Want可以直接匹配到指定的Ability。AbilityName需要在一个应用的范围内保证唯一。 |
|
[
action
](
js-apis-app-ability-wantConstant.md#wantConstant.Action
)
| string | 否 | 表示要执行的通用操作(如:查看、分享、应用详情)。在隐式Want中,您可以定义该字段,配合uri或parameters来表示对数据要执行的操作。隐式Want定义及匹配规则请参见
[
显式Want与隐式Want匹配规则
](
application-models/explicit-implicit-want-mappings.md
)
。
|
|
[
entities
](
js-apis-app-ability-wantConstant.md#wantConstant.Entity
)
| Array
\<
string> | 否 | 表示目标Ability额外的类别信息(如:浏览器、视频播放器)。在隐式Want中是对action字段的补充。在隐式Want中,您可以定义该字段,来过滤匹配Ability类型。 |
|
action | string | 否 | 表示要执行的通用操作(如:查看、分享、应用详情)。在隐式Want中,您可以定义该字段,配合uri或parameters来表示对数据要执行的操作。隐式Want定义及匹配规则请参见
[
显式Want与隐式Want匹配规则
](
../../application-models/explicit-implicit-want-mappings.md
)
。
|
|
entities
| Array
\<
string> | 否 | 表示目标Ability额外的类别信息(如:浏览器、视频播放器)。在隐式Want中是对action字段的补充。在隐式Want中,您可以定义该字段,来过滤匹配Ability类型。 |
| uri | string | 否 | 表示携带的数据,一般配合type使用,指明待处理的数据类型。如果在Want中指定了uri,则Want将匹配指定的Uri信息,包括
`scheme`
、
`schemeSpecificPart`
、
`authority`
和
`path`
信息。 |
| type | string | 否 | 表示MIME type类型描述,打开文件的类型,主要用于文管打开文件。比如:'text/xml' 、 'image/
*
'等,MIME定义请参见https://www.iana.org/assignments/media-types/media-types.xhtml?utm_source=ld246.com。 |
| parameters | {
[
key: string]: any} | 否 | 表示WantParams描述,由开发者自行决定传入的键值对。默认会携带以下key值:<br />- ohos.aafwk.callerPid:表示拉起方的pid。<br />- ohos.aafwk.param.callerToken:表示拉起方的token。<br />- ohos.aafwk.param.callerUid:表示[BundleInfo
](
js-apis-bundleManager-bundleInfo.md#bundleinfo-1
)
中的uid,应用包里应用程序的uid。
<br
/>
- component.startup.newRules:表示是否启用新的管控规则。
<br
/>
- moduleName:表示拉起方的模块名,该字段的值即使定义成其他字符串,在传递到另一端时会被修改为正确的值。
<br
/>
- ohos.dlp.params.sandbox:表示dlp文件才会有。 |
...
...
@@ -31,85 +31,107 @@ import Want from '@ohos.app.ability.Want';
**示例:**
-
基础用法
(在UIAbility对象中调用,其中示例中的context为UIAbility的上下文对象)
。
-
基础用法
:在UIAbility对象中调用,示例中的context的获取方式请参见
[
获取UIAbility的上下文信息
](
../../application-models/uiability-usage.md#获取uiability的上下文信息
)
。
```
ts
let
want
=
{
'
deviceId
'
:
''
,
// deviceId为空表示本设备
'
bundleName
'
:
'
com.example.myapplication
'
,
'
abilityName
'
:
'
FuncAbility
'
,
'
moduleName
'
:
'
entry
'
// moduleName非必选
};
this
.
context
.
startAbility
(
want
,
(
error
)
=>
{
// 显式拉起Ability,通过bundleName、abilityName和moduleName可以唯一确定一个Ability
console
.
log
(
'
error.code = ${error.code}
'
);
});
let
want
=
{
'
deviceId
'
:
''
,
// deviceId为空表示本设备
'
bundleName
'
:
'
com.example.myapplication
'
,
'
abilityName
'
:
'
FuncAbility
'
,
'
moduleName
'
:
'
entry
'
// moduleName非必选
};
this
.
context
.
startAbility
(
want
,
(
err
)
=>
{
// 显式拉起Ability,通过bundleName、abilityName和moduleName可以唯一确定一个Ability
console
.
error
(
`startAbility failed, code is
${
err
.
code
}
, message is
${
err
.
message
}
`
);
});
```
-
通过自定字段传递数据
, 以下为当前支持类型(在UIAbility对象中调用,其中示例中的context为UIAbility的上下文对象
)。
-
通过自定字段传递数据
,以下为当前支持类型(在UIAbility对象中调用,示例中的context的获取方式请参见
[
获取UIAbility的上下文信息
](
../../application-models/uiability-usage.md#获取uiability的上下文信息
)
)。
* 字符串(String)
```ts
let want = {
bundleName: 'com.example.myapplication',
abilityName: 'FuncAbility',
parameters: {
keyForString: 'str',
},
bundleName: 'com.example.myapplication',
abilityName: 'FuncAbility',
parameters: {
keyForString: 'str',
},
};
this.context.startAbility(want, (err) => {
console.error(`startAbility failed, code is ${err.code}, message is ${err.message}`);
});
```
* 数字(Number)
```ts
let want = {
bundleName: 'com.example.myapplication',
abilityName: 'FuncAbility',
parameters: {
keyForInt: 100,
keyForDouble: 99.99,
},
bundleName: 'com.example.myapplication',
abilityName: 'FuncAbility',
parameters: {
keyForInt: 100,
keyForDouble: 99.99,
},
};
this.context.startAbility(want, (err) => {
console.error(`startAbility failed, code is ${err.code}, message is ${err.message}`);
});
```
* 布尔(Boolean)
```ts
let want = {
bundleName: 'com.example.myapplication',
abilityName: 'FuncAbility',
parameters: {
keyForBool: true,
},
bundleName: 'com.example.myapplication',
abilityName: 'FuncAbility',
parameters: {
keyForBool: true,
},
};
this.context.startAbility(want, (err) => {
console.error(`startAbility failed, code is ${err.code}, message is ${err.message}`);
});
```
* 对象(Object)
```ts
let want = {
bundleName: 'com.example.myapplication',
abilityName: 'FuncAbility',
parameters: {
keyForObject: {
keyForObjectString: 'str',
keyForObjectInt: -200,
keyForObjectDouble: 35.5,
keyForObjectBool: false,
},
bundleName: 'com.example.myapplication',
abilityName: 'FuncAbility',
parameters: {
keyForObject: {
keyForObjectString: 'str',
keyForObjectInt: -200,
keyForObjectDouble: 35.5,
keyForObjectBool: false,
},
},
};
this.context.startAbility(want, (err) => {
console.error(`startAbility failed, code is ${err.code}, message is ${err.message}`);
});
```
* 数组(Array)
```ts
let want = {
bundleName: 'com.example.myapplication',
abilityName: 'FuncAbility',
parameters: {
keyForArrayString: ['str1', 'str2', 'str3'],
keyForArrayInt: [100, 200, 300, 400],
keyForArrayDouble: [0.1, 0.2],
keyForArrayObject: [{obj1: 'aaa'}, {obj2: 100
}],
},
bundleName: 'com.example.myapplication',
abilityName: 'FuncAbility',
parameters: {
keyForArrayString: ['str1', 'str2', 'str3'],
keyForArrayInt: [100, 200, 300, 400],
keyForArrayDouble: [0.1, 0.2],
keyForArrayObject: [{ obj1: 'aaa' }, { obj2: 100
}],
},
};
this.context.startAbility(want, (err) => {
console.error(`startAbility failed, code is ${err.code}, message is ${err.message}`);
});
```
* 文件描述符(FD)
```ts
import fileio from '@ohos.fileio';
let fd;
try {
fd = fileio.openSync('/data/storage/el2/base/haps/pic.png');
...
...
@@ -117,21 +139,17 @@ import Want from '@ohos.app.ability.Want';
console.log('openSync fail: ${JSON.stringify(e)}');
}
let want = {
'deviceId': '', // deviceId为空表示本设备
'bundleName': 'com.example.myapplication',
'abilityName': 'FuncAbility',
'moduleName': 'entry', // moduleName非必选
'parameters': {
'keyFd':{'type':'FD', 'value':fd
} // {'type':'FD', 'value':fd}是固定用法,用于表示该数据是FD
}
'deviceId': '', // deviceId为空表示本设备
'bundleName': 'com.example.myapplication',
'abilityName': 'FuncAbility',
'moduleName': 'entry', // moduleName非必选
'parameters': {
'keyFd': { 'type': 'FD', 'value': fd
} // {'type':'FD', 'value':fd}是固定用法,用于表示该数据是FD
}
};
this.context.startAbility(want, (error) => {
// 显式拉起Ability,通过bundleName、abilityName和moduleName可以唯一确定一个Ability
console.log('error.code = ${error.code}'
);
this.context.startAbility(want, (err) => {
console.error(`startAbility failed, code is ${err.code}, message is ${err.message}`
);
});
```
-
更多详细说明和示例请参见:
[
应用模型
](
../../application-models/Readme-CN.md
)
的信息传递载体Want
<!--no_check-->
zh-cn/application-dev/reference/apis/js-apis-inner-application-errorObserver.md
浏览文件 @
9698f5ad
...
...
@@ -22,9 +22,9 @@ onUnhandledException(errMsg: string): void;
import
errorManager
from
'
@ohos.app.ability.errorManager
'
;
let
observer
=
{
onUnhandledException
(
errorMsg
)
{
console
.
log
(
'
onUnhandledException, errorMsg:
'
,
errorMsg
);
}
onUnhandledException
(
errorMsg
)
{
console
.
log
(
'
onUnhandledException, errorMsg:
'
,
errorMsg
);
}
};
try
{
...
...
zh-cn/application-dev/reference/apis/js-apis-inner-application-uiAbilityContext.md
浏览文件 @
9698f5ad
此差异已折叠。
点击以展开。
zh-cn/application-dev/windowmanager/application-window-stage.md
浏览文件 @
9698f5ad
...
...
@@ -51,7 +51,7 @@
## 设置应用主窗口
在
`Stage`
模型下,应用主窗口由
`
Ability`
创建并维护生命周期。在
`
Ability`
的
`onWindowStageCreate`
回调中,通过
`WindowStage`
获取应用主窗口,即可对其进行属性设置等操作。
在
`Stage`
模型下,应用主窗口由
`
UIAbility`
创建并维护生命周期。在
`UI
Ability`
的
`onWindowStageCreate`
回调中,通过
`WindowStage`
获取应用主窗口,即可对其进行属性设置等操作。
### 开发步骤
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录