概述
当用户关上、切换和返回到对应利用时,利用中的UIAbility实例会在其生命周期的不同状态之间转换。UIAbility类提供了一系列回调,通过这些回调能够晓得以后UIAbility实例的某个状态产生扭转,会通过UIAbility实例的创立和销毁,或者UIAbility实例产生了前后台的状态切换。
UIAbility的生命周期包含Create、Foreground、Background、Destroy四个状态,如下图所示。
图1 UIAbility生命周期状态
生命周期状态阐明
Create状态
Create状态为在利用加载过程中,UIAbility实例创立实现时触发,零碎会调用onCreate()回调。能够在该回调中进行利用初始化操作,例如变量定义资源加载等,用于后续的UI展现。
import UIAbility from '@ohos.app.ability.UIAbility';import AbilityConstant from '@ohos.app.ability.AbilityConstant';import Want from '@ohos.app.ability.Want';export default class EntryAbility extends UIAbility { onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) { // 利用初始化 } // ...}
阐明:
Want是对象间信息传递的载体,能够用于利用组件间的信息传递。
WindowStageCreate和WindowStageDestroy状态
UIAbility实例创立实现之后,在进入Foreground之前,零碎会创立一个WindowStage。WindowStage创立实现后会进入onWindowStageCreate()回调,能够在该回调中设置UI加载、设置WindowStage的事件订阅。
图2 WindowStageCreate和WindowStageDestroy状态
在onWindowStageCreate()回调中通过loadContent()办法设置利用要加载的页面,并依据须要调用on('windowStageEvent')办法订阅WindowStage的事件(获焦/失焦、可见/不可见)。
import UIAbility from '@ohos.app.ability.UIAbility';import window from '@ohos.window';export default class EntryAbility extends UIAbility { // ... onWindowStageCreate(windowStage: window.WindowStage) { // 设置WindowStage的事件订阅(获焦/失焦、可见/不可见) try { windowStage.on('windowStageEvent', (data) => { let stageEventType: window.WindowStageEventType = data; switch (stageEventType) { case window.WindowStageEventType.SHOWN: // 切到前台 console.info('windowStage foreground.'); break; case window.WindowStageEventType.ACTIVE: // 获焦状态 console.info('windowStage active.'); break; case window.WindowStageEventType.INACTIVE: // 失焦状态 console.info('windowStage inactive.'); break; case window.WindowStageEventType.HIDDEN: // 切到后盾 console.info('windowStage background.'); break; default: break; } }); } catch (exception) { console.error('Failed to enable the listener for window stage event changes. Cause:' + JSON.stringify(exception)); } // 设置UI加载 windowStage.loadContent('pages/Index', (err, data) => { // ... }); }}
对应于onWindowStageCreate()回调。在UIAbility实例销毁之前,则会先进入onWindowStageDestroy()回调,能够在该回调中开释UI资源。例如在onWindowStageDestroy()中登记获焦/失焦等WindowStage事件。
import UIAbility from '@ohos.app.ability.UIAbility';import window from '@ohos.window';import { BusinessError } from '@ohos.base';export default class EntryAbility extends UIAbility { windowStage: window.WindowStage | undefined = undefined; // ... onWindowStageCreate(windowStage: window.WindowStage) { this.windowStage = windowStage; // ... } onWindowStageDestroy() { // 开释UI资源 // 例如在onWindowStageDestroy()中登记获焦/失焦等WindowStage事件 try { if (this.windowStage) { this.windowStage.off('windowStageEvent'); } } catch (err) { let code = (err as BusinessError).code; let message = (err as BusinessError).message; console.error(`Failed to disable the listener for windowStageEvent. Code is ${code}, message is ${message}`); }; }}
Foreground和Background状态
Foreground和Background状态别离在UIAbility实例切换至前台和切换至后盾时触发,对应于onForeground()回调和onBackground()回调。
onForeground()回调,在UIAbility的UI可见之前,如UIAbility切换至前台时触发。能够在onForeground()回调中申请零碎须要的资源,或者从新申请在onBackground()中开释的资源。
onBackground()回调,在UIAbility的UI齐全不可见之后,如UIAbility切换至后盾时候触发。能够在onBackground()回调中开释UI不可见时无用的资源,或者在此回调中执行较为耗时的操作,例如状态保留等。
例如利用在应用过程中须要应用用户定位时,假如利用已取得用户的定位权限受权。在UI显示之前,能够在onForeground()回调中开启定位性能,从而获取到以后的地位信息。
当利用切换到后盾状态,能够在onBackground()回调中进行定位性能,以节俭零碎的资源耗费。
import UIAbility from '@ohos.app.ability.UIAbility';export default class EntryAbility extends UIAbility { // ... onForeground() { // 申请零碎须要的资源,或者从新申请在onBackground()中开释的资源 } onBackground() { // 开释UI不可见时无用的资源,或者在此回调中执行较为耗时的操作 // 例如状态保留等 }}
Destroy状态
Destroy状态在UIAbility实例销毁时触发。能够在onDestroy()回调中进行系统资源的开释、数据的保留等操作。
例如调用terminateSelf()办法进行以后UIAbility实例,从而实现UIAbility实例的销毁;或者用户应用最近工作列表敞开该UIAbility实例,实现UIAbility的销毁。
import UIAbility from '@ohos.app.ability.UIAbility';export default class EntryAbility extends UIAbility { // ... onDestroy() { // 系统资源的开释、数据的保留等 }}
要想成为一名合格的鸿蒙高级开发工程师,以上知识点是必须要把握的,除此之外,还须要把握一些鸿蒙利用开发相干的一些技术
为了节俭大家一些查找的工夫,这边联结几位行业大佬,为大家筹备了一份《鸿蒙全栈技术 实战我的项目驱动式教学》的学习导图,从入门到进阶再到南北向开发实战的一整套残缺体系,想要学习理解更多鸿蒙开发的相干常识能够借鉴:《鸿蒙4.0源码开发架构剖析pdf》
除了下面整顿的思维导图以外,这里还特地整顿的一份《鸿蒙 (Harmony OS)开发学习手册》给大家进行参考学习:
一、入门必看
1.利用开发导读(ArkTS)
2.……
二、HarmonyOS 概念
1.零碎定义
2.技术架构
3.技术个性
4.系统安全
5........
三、如何疾速入门?《一小时疾速意识HarmonyOS》
1.基本概念
2.构建第一个ArkTS利用
3.构建第一个JS利用
4.……
四、开发基础知识
1.利用基础知识
2.配置文件
3.利用数据管理
4.利用平安治理
5.利用隐衷爱护
6.三方利用调用管控机制
7.资源分类与拜访
8.学习ArkTS语言
9.……
五、基于ArkTS 开发
1.Ability开发
2.UI开发
3.公共事件与告诉
4.窗口治理
5.媒体
6.平安
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)治理
11.设施治理
12.设施应用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……
更多理解更多鸿蒙开发的相干常识能够参考:《鸿蒙HarmonyOS分布式我的项目实战》