• Home
Name Date Size #Lines LOC

..--

AppScope/12-May-2024-3633

entry/12-May-2024-3,6783,014

screenshots/device/12-May-2024-

.gitignoreD12-May-2024121 88

README_zh.mdD12-May-202412.1 KiB17487

build-profile.json5D12-May-20241 KiB4241

hvigorfile.jsD12-May-2024168 21

package.jsonD12-May-2024374 1918

README_zh.md

1# Stage模型
2
3### 介绍
4
5[Stage模型](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ability/stage-brief.md)的设计,主要是为了解决FA模型无法解决的开发场景问题,方便开发者更加方便地开发出分布式环境下的复杂应用。
6
7Stage模型的设计基于如下三个出发点:
8
9- **应用的能力与系统总体功能和功耗的平衡**
10
11  在系统运行过程中,前台应用的资源占用会被优先保障,与此同时由于应用能力不同而产生的功耗,也需要符合系统整体功耗的要求。Stage模型通过Ability与UI分离、严格的后台管控、基于场景的服务机制及单进程模型来达成这种应用能力与整体系统功耗的平衡。
12
13- **原生支持组件级的迁移和协同**
14
15  OpenHarmony是原生支持分布式的操作系统,应用框架需要从架构设计上使得组件更易于实现迁移和协同。Stage模型通过Ability与UI分离及UI展示与服务能力合一等模型特性,实现这一设计目标。
16
17- **支持多设备和多窗口形态的特点**
18
19  为了支持多种设备形态和更易于实现多种不同的窗口形态,需要组件管理服务和窗口管理服务在架构层面上是解耦的,从而方便裁剪,更有利于定制不同的窗口形态。Stage模型通过重新定义了Ability生命周期定义和设计组件管理服务和窗口管理服务的单向依赖解决这一问题。
20
21  本示例主要展示Stage模型与FA模型的区别,分别从AbilityContext、ServiceExtensionContext、 FormExtensionContext、DataShareExtensionAbility、FormExtension、Bundle、Window、abilityAccessCtrl等模块进行介绍。
22
23  **ServiceExtensionAbility**:生命周期函数onCreate、onRequest、onConnect、onReconnect、onDisconnect、onDestroy。通过AbilityContext中的startAbility启动Service;通过connectAbility连接service;通过disconnectAbility断开service连接;通过rpc进行客户端与服务端通信。
24
25  **FormExtension**:生命周期函数onCreate、onCastToNormal、onUpdate、onVisibilityChange、onEvent、onAcquireFormState、onDestroy,通过formBindingData中的createFormBindingData创建卡片。
26
27  **AbilityContext**:AbilityContext是Ability的上下文环境,继承自Context。AbilityContext模块提供允许访问特定于ability的资源的能力,包括对Ability的启动、停止的设置、获取caller通信接口、拉起弹窗请求用户授权等。在使用AbilityContext的功能前,需要通过Ability子类实例获取。
28
29  **ServiceExtensionContext**:ServiceExtensionContext模块是ServiceExtensionAbility的上下文环境,继承自ExtensionContext。ServiceExtensionContext模块提供ServiceExtensionAbility具有的能力和接口,包括启动、停止、绑定、解绑Ability。 在使用ServiceExtensionContext的功能前,需要通过ServiceExtensionAbility子类实例获取。
30
31  **FormExtensionContext**:FormExtensionContext模块是FormExtension的上下文环境,继承自ExtensionContext。FormExtensionContext模块提供FormExtension具有的接口和能力。 在使用FormExtensionContext的功能前,需要通过FormExtension获取。
32
33  **DataShareExtensionAbility**: DataShareExtensionAbility基于ExtensionAbility框架,提供支持数据共享业务的能力,本模块接口仅可在Stage模型下使用。
34
35  **Bundle**:本模块提供应用信息查询能力,支持BundleInfo、ApplicationInfo、Ability、ExtensionAbility、应用状态等信息的查询 。
36
37  **Window**:窗口提供管理窗口的一些基础能力,包括对当前窗口的创建、销毁、各属性设置,以及对各窗口间的管理调度。
38
39  **abilityAccessCtrl**:程序访问控制提供程序的权限管理能力,包括鉴权、授权和取消授权等。
40
41#### Stage和FA模型的区别
42
431.在Stage模型中主要有module.json5,需要时对应的ServiceExtAbility等须配置在module.json5中的extensionAbilities中,Page页面的Ability在abilites中;对应FA模型中主要配置文件config.json,需要时将对应的Ability配置在config.jsonmodule/abilites44
452.Stage模型中卡片的创建需要的配置文件在resources/base/profile/form_config.json46
473.Stage模型中ability生命周期与FA模型生命周期见[Stage模型生命周期](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ability/stage-brief.md#生命周期) ,[FA模型生命周期](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/ability/fa-brief.md#生命周期) 。
48
494.Stage模型中DataShareExtensionAbility对应FA模型中dataAbility,具体实现差异详见方法注释。
50
515.Stage模型中ServiceExtensionAbility对应FA模型中ServiceAbility,具体实现差异详见方法注释。
52
536.stage模型DataShareHelper对应FA模型中DataAbilityHelper 。
54
557.Stage模型从API Version9开始,通过context获取resourceManager对象的方式,再调用其内部获取资源的接口, 无需再导入 @ohos.resourceManager ;FA模型通过导入@ohos.resourceManager, 获取应用资源信息。
56
57#### FA对应Stage接口(FA——>Stage)
58
59**FeatureAbility——>AbilityContext、dataShare接口:**
60
61[FeatureAbilityHelper](../FaModel/entry/src/main/ets/MainAbility/feature/FeatureAbilityHelper.ts):getWant——>MainAbility:want
62
63[FeatureAbilityHelper](../FaModel/entry/src/main/ets/MainAbility/feature/FeatureAbilityHelper.ts):startAbilityForResult——>AbilityContextController:startAbilityForResult
64
65[FeatureAbilityHelper](../FaModel/entry/src/main/ets/MainAbility/feature/FeatureAbilityHelper.ts):acquireDataAbilityHelper——>DataShareHelper:createDataShareHelper
66
67[FeatureAbilityHelper](../FaModel/entry/src/main/ets/MainAbility/feature/FeatureAbilityHelper.ts):terminateSelfWithResult——>AbilityContextController:terminateSelfWithResult
68
69[FeatureAbilityHelper](../FaModel/entry/src/main/ets/MainAbility/feature/FeatureAbilityHelper.ts):hasWindowFocus——>Stage模型不支持
70
71[FeatureAbilityHelper](../FaModel/entry/src/main/ets/MainAbility/feature/FeatureAbilityHelper.ts):terminateSelf——>AbilityContextController:terminateSelf
72
73[FeatureAbilityHelper](../FaModel/entry/src/main/ets/MainAbility/feature/FeatureAbilityHelper.ts):getWindow——>WindowController:getTopWindow
74
75[FeatureAbilityHelper](../FaModel/entry/src/main/ets/MainAbility/feature/FeatureAbilityHelper.ts):startServiceAbility——>AbilityContextController:startAbility
76
77[FeatureAbilityHelper](../FaModel/entry/src/main/ets/MainAbility/feature/FeatureAbilityHelper.ts):connectService——>AbilityContextController:connectAbility
78
79[FeatureAbilityHelper](../FaModel/entry/src/main/ets/MainAbility/feature/FeatureAbilityHelper.ts):disconnectService——>AbilityContextController:disconnectAbility
80
81**context-->AbilityContext、Bundle、Window、abilityAccessCtrl接口:**
82
83[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getOrCreateLocalDir——>BundleController:entryDir
84
85[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):verifyPermission——>AbilityAccessCtrlController:verifyAccessToken
86
87[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):requestPermissionsFromUser——>AbilityContextController:requestPermissionsFromUser
88
89[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getApplicationInfo——>BundleController:getApplicationInfo
90
91[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getBundleName——>AbilityContextPage:abilityInfo.bundleName(属性)
92
93[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getDisplayOrientation——>AbilityContextPage:config.direction(属性)
94
95[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):setDisplayOrientation——>WindowController:setPreferredOrientation
96
97[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):setShowOnLockScreen——>MainAbility:setShowOnLockScreen
98
99[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):setWakeUpScreen——>WindowController:setWakeUpScreen
100
101[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getProcessInfo——>AbilityContextPage:abilityInfo.descriptionIdabilityInfo.name(属性)
102
103[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getElementName——>BundleController:getAbilityInfo
104
105[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getProcessName——>BundleController:process
106
107[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getCallingBundle——>want.parameters(属性)
108
109[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getCacheDir——>AbilityContextPage:cacheDir(属性)
110
111[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getFilesDir——>AbilityContextPage:filesDir(属性)
112
113[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getOrCreateDistributedDir——>AbilityContextPage:distributedFilesDir(属性)
114
115[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getAppType——>BundleController:entityType
116
117[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getHapModuleInfo——>AbilityContextPage:currentHapModuleInfo(属性)
118
119[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getAppVersionInfo——>BundleController.getDispatcherVersion
120
121[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getAbilityInfo——>AbilityContextPage:abilityInfo(属性)
122
123[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):getApplicationContext——>AbilityContextPage:getApplicationContext()
124
125[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):isUpdatingConfigurations——>Stage模型不支持
126
127[AppContext](../FaModel/entry/src/main/ets/MainAbility/feature/AppContext.ts):printDrawnCompleted——>Stage模型不支持
128
129**particleAbility ——>ServiceExtensionContext、dataShare接口:**
130
131
132[ParticleAbilityHelper](../FaModel/entry/src/main/ets/MainAbility/feature/ParticleAbilityHelper.ts) :startAbility——>ServiceExtContextController:startAbility
133
134[ParticleAbilityHelper](../FaModel/entry/src/main/ets/MainAbility/feature/ParticleAbilityHelper.ts) :connectAbility——>ServiceExtContextController:connectAbility
135
136[ParticleAbilityHelper](../FaModel/entry/src/main/ets/MainAbility/feature/ParticleAbilityHelper.ts) :disconnectAbility——>ServiceExtContextController:disconnectAbility
137
138[ParticleAbilityHelper](../FaModel/entry/src/main/ets/MainAbility/feature/ParticleAbilityHelper.ts):terminateSelf——>ServiceExtContextController:terminateSelf
139
140[ParticleAbilityHelper](../FaModel/entry/src/main/ets/MainAbility/feature/ParticleAbilityHelper.ts) :acquireDataAbilityHelper——>DataShareHelper:createDataShareHelper
141
142#### 使用说明:
143
1441.点击**DataShareExtAbility**按钮,跳转到DataShareExtAbility页面;
145
146点击**+**,向rdb数据库中添加单个数据,界面显示添加的数据内容;
147
148点击**删除**按钮删除指定数据;
149
150点击数据列表,弹出dialog框,可对数据进行修改,点击**确认**按钮确认修改;
151
152点击返回键,返回首页。
153
1542.点击各个功能按钮测试各个接口。
155
156#### 效果预览:
157
158![](./screenshots/device/stage_mode.png)
159
160### 相关权限
161
162不涉及。
163
164### 依赖
165
166FaModel升级StageModel,对应的FaModel参考[FaModel](../FaModel)。
167
168### 约束与限制
169
1701.本示例仅支持标准系统上运行。
171
1722.本示例需要使用 ServiceExtensionAbility、DataShareExtensionAbility等系统权限的系统接口。使用Full SDK时需要手动从镜像站点获取,并在DevEco Studio中替换,具体操作可参考[替换指南](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/full-sdk-switch-guide.md)173
1743.本示例需要使用DevEco Studio 3.0 Beta4 (Build Version: 3.0.0.992, built on July 14, 2022)版本进行编译。