UIAbility组件是一种包含UI界面的应用组件,主要用于和用户交互。直白来说就是构建页面,可以通过多个页面来实现功能模块。
创建的module默认情况下就是一个ability,除此之外还有HAR(静态资源包)和HSP(动态共享包),主要用于module间共用资源,后续会做详细讲解。
主要内容:
1. `ability module`目录结构及声明配置;
2. 生命周期;
3. 与UI界面数据同步;
4. 应用内`UIAbility`间跳转;
5. 启动模式;
如`media`中的`icon.png`,可以这样访问:
```js
//页面中
Image($r("app.media.icon"))
// 配置文件中
"icon": "$media:icon"
```
国际化使用(文本):
```js
// element/string.json 默认文本
{
"string": [
{
"name": "title",
"value": "柏木白"
}
]
}
// en_US/element/string.json 英文
{
"string": [
{
"name": "title",
"value": "1000phone"
}
]
}
// zh_CN/element/string.json 中文
{
"string": [
{
"name": "title",
"value": "柏木白"
}
]
}
//页面中访问
Text($r("app.string.title"))
// 配置文件中
"label": "$string:title"
```
为使应用能够正常使用`UIAbility`,需要在`module.json5`配置文件的`abilities`标签中声明`UIAbility`的名称、入口、标签等相关信息。
```js
{
"module": {
// ...
"abilities": [
{
"name": "EntryAbility", // UIAbility组件的名称
"srcEntrance": "./ets/entryability/EntryAbility.ts", // UIAbility组件的代码路径
"description": "$string:EntryAbility_desc", // UIAbility组件的描述信息
"icon": "$media:icon", // UIAbility组件的图标
"label": "$string:EntryAbility_label", // UIAbility组件的标签
"startWindowIcon": "$media:icon", // UIAbility组件启动页面图标资源文件的索引
"startWindowBackground": "$color:start_window_background", // UIAbility组件启动页面背景颜色资源文件的索引
// ...
}
]
}
}
```
当用户打开、切换和返回到对应应用时,应用中的`UIAbility`实例会在其生命周期的不同状态之间转换。
`UIAbility`的生命周期包括`Create`、`Foreground`、`Background`、`Destroy`四个状态,如下图所示。
`Create`状态为在应用加载过程中,`UIAbility`实例创建完成时触发,系统会调用`onCreate()`回调。可以在该回调中进行应用初始化操作,例如变量定义资源加载等,用于后续的UI界面展示。
```js
import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window';
export default class EntryAbility extends UIAbility {
onCreate(want, launchParam) {
// 应用初始化
// want中包含如包代码路径、Bundle名称、Ability名称和应用程序需要的环境状态等属性信息
// launchParam包含启动参数 主要在被其他UIAbility唤起时使用
// 可通过this.context访问上下文对象 后续会做讲解
}
// ...
}
```
`UIAbility`实例创建完成之后,在进入`Foreground`之前,系统会创建一个`WindowStage`。`WindowStage`创建完成后会进入`onWindowStageCreate()`回调,可以在该回调中设置UI界面加载、设置`WindowStage`的事件订阅。
在`onWindowStageCreate()`回调中通过`loadContent()`方法设置应用要加载的页面并根据需要订阅WindowStage的事件(获焦/失焦、可见/不可见)。
```js
import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window';
export default class EntryAbility extends UIAbility {
onWindowStageCreate(windowStage: Window.WindowStage) {
// 设置WindowStage的事件订阅(获焦/失焦、可见/不可见)
// 设置UI界面加载
windowStage.loadContent('pages/Index', (err, data) => {
// ...
});
}
}
```
对应于`onWindowStageCreate()`回调。在`UIAbility`实例销毁之前,则会先进入`onWindowStageDestroy()`回调,可以在该回调中释放UI界面资源。例如在`onWindowStageDestroy()`中注销获焦/失焦等`WindowStage`事件。
`