IT评测·应用市场-qidao123.com
标题:
HarmonyOS 5.0应用开发——UIAbility生命周期
[打印本页]
作者:
盛世宏图
时间:
2025-2-20 21:24
标题:
HarmonyOS 5.0应用开发——UIAbility生命周期
【高心星出品】
UIAbility组件
UIAbility组件是一种包含UI的应用组件,主要用于和用户交互。
UIAbility组件是体系调度的根本单元,为应用提供绘制界面的窗口。一个应用可以包含一个或多个UIAbility组件。例如,在支付应用中,可以将入口功能和收付款功能分别设置为独立的UIAbility。
每一个UIAbility组件实例都会在最近任务列表中显示一个对应的任务。
对于开发者而言,可以根据具体场景选择单个还是多个UIAbility,划分发起如下:
如果开发者希望在任务视图中看到一个任务,发起使用“一个UIAbility+多个页面”的方式,可以避免不必要的资源加载。
如果开发者希望在任务视图中看到多个任务,或者需要同时开启多个窗口,发起使用多个UIAbility实现差异的功能。
例如,即时通讯类应用中的消息列表与音视频通话采取差异的UIAbility举行开发,既可以方便地切换任务窗口,又可以实现应用的两个任务窗口在一个屏幕上分屏显示。
创建Ability
查看ability在module.json5的设置:
登录后复制
{
"module": {
// ...
"abilities": [
{
"name": "EntryAbility", // UIAbility组件的名称
"srcEntry": "./ets/entryability/EntryAbility.ets", // 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组件启动页面背景颜色资源文件的索引
// ...
}
]
}
}
复制代码
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
UIAbility的生命周期
当用户打开、切换和返回到对应应用时,应用中的UIAbility实例会在其生命周期的差异状态之间转换。UIAbility类提供了一系列回调,通过这些回调可以知道当前UIAbility实例的某个状态发生改变,会颠末UIAbility实例的创建和烧毁,或者UIAbility实例发生了前后台的状态切换。
Create状态
Create状态为在应用加载过程中,UIAbility实例创建完成时触发,体系会调用onCreate()回调。可以在该回调中举行页面初始化操纵,例如变量定义资源加载等,用于后续的UI展示。
登录后复制
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
// 获取跳转ability携带的数据
let params=want.parameters
let name=params!.name
}
复制代码
1.
2.
3.
4.
5.
6.
WindowStageCreate状态
UIAbility实例创建完成之后,在进入Foreground之前,体系会创建一个WindowStage。WindowStage创建完成后会进入onWindowStageCreate()回调,可以在该回调中设置UI加载、设置WindowStage的事件订阅。
在onWindowStageCreate()回调中通过loadContent()方法设置应用要加载的页面,并根据需要调用on('windowStageEvent')方法订阅WindowStage的事件(获焦/失焦、切到前台/切到后台、前台可交互/前台不可交互)。
登录后复制
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
// 监听状态状态
windowStage.on('windowStageEvent',(event)=>{
switch (event){
case window.WindowStageEventType.SHOWN:
console.info('gxxt ','切换到前台')
break;
case window.WindowStageEventType.SHOWN:
console.info('gxxt ','切换到前台')
break;
case window.WindowStageEventType.ACTIVE:
console.info('gxxt ','获得焦点')
break;
case window.WindowStageEventType.INACTIVE:
console.info('gxxt ','失去焦点')
break;
case window.WindowStageEventType.RESUMED:
console.info('gxxt ','可以交互')
break; case window.WindowStageEventType.PAUSED:
console.info('gxxt ','卡顿不可交互')
break;
case window.WindowStageEventType.HIDDEN:
console.info('gxxt ','切换到后台')
break;
}
})
// 加载页面
windowStage.loadContent('pages/Index', (err) => {
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
return;
}
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
});
}
复制代码
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
Foreground和Background状态
Foreground和Background状态分别在UIAbility实例切换至前台和切换至后台时触发,对应于onForeground()回调和onBackground()回调。
onForeground()回调,在UIAbility的UI可见之前,如UIAbility切换至前台时触发。可以在onForeground()回调中申请体系需要的资源,或者重新申请在onBackground()中释放的资源。
onBackground()回调,在UIAbility的UI完全不可见之后,如UIAbility切换至后台时候触发。可以在onBackground()回调中释放UI不可见时无用的资源,或者在此回调中实行较为耗时的操纵,例如状态生存等。
例如应用在使用过程中需要使用用户定位时,假设应用已得到用户的定位权限授权。在UI显示之前,可以在onForeground()回调中开启定位功能,从而获取到当前的位置信息。
当应用切换到后台状态,可以在onBackground()回调中制止定位功能,以节流体系的资源斲丧。
登录后复制
onForeground(): void {
// Ability has brought to foreground
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
}
onBackground(): void {
// Ability has back to background
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
}
复制代码
1.
2.
3.
4.
5.
6.
7.
8.
9.
WindowStageWillDestroy状态
onWindowStageWillDestroy()回调在WindowStage烧毁前实行,此时WindowStage可以使用。
登录后复制
onWindowStageWillDestroy(windowStage: window.WindowStage): void {
// 关闭窗口事件监听
windowStage.off('windowStageEvent')
}
复制代码
1.
2.
3.
4.
Destroy状态
Destroy状态在UIAbility实例烧毁时触发。可以在onDestroy()回调中举行体系资源的释放、数据的生存等操纵。
例如,调用terminateSelf()方法制止当前UIAbility实例,实行onDestroy()回调,并完成UIAbility实例的烧毁。
登录后复制
onDestroy(): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
}
复制代码
1.
2.
3.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4