1. 页面和自定义组件生命周期。
指南:文档中心
api:文档中心
页面生命周期,即被@Entry装饰的组件生命周期,提供以下生命周期接口:
-
onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景。
-
onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。
-
onBackPress:当用户点击返回按钮时触发。
组件生命周期,即一般用@Component装饰的自定义组件的生命周期,提供以下生命周期接口:
-
aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行。
-
onDidBuild:组件build()函数执行完成之后回调该接口,不建议在onDidBuild函数中更改状态变量、使用animateTo等功能,这可能会导致不稳定的UI表现。
-
aboutToDisappear:aboutToDisappear函数在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定。
import { Theme } from '@ohos.arkui.theme';
@Entry
@Component
struct LifeCycleCase {
@State message: string = 'Hello World';
aboutToAppear(): void {
// aboutToAppear函数在创建自定义组件的新实例后,在执行其build()函数之前执行。
// 允许在aboutToAppear函数中改变状态变量,更改将在后续执行build()函数中生效。
console.log('生命周期', 'aboutToAppear');
}
@State primary: string = '#000'
onWillApplyTheme(theme: Theme): void {
//onWillApplyTheme函数用于获取当前组件上下文的Theme对象,在创建自定义组件的新实例后,在执行其build()函数之前执行。
// 允许在onWillApplyTheme函数中改变状态变量,更改将在后续执行build()函数中生效。
// 在EntryAbility修改默认主题颜色
this.primary = theme.colors.fontPrimary as string
console.log('生命周期', 'onWillApplyTheme', theme.colors.fontPrimary);
}
build() {
RelativeContainer() {
Text(this.message)
.id('LifeCycleCaseHelloWorld')
.fontSize(50)
.fontColor(this.primary)
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
}
.height('100%')
.width('100%')
}
onDidBuild(): void {
//onDidBuild函数在执行自定义组件的build()函数之后执行。
// 不建议在onDidBuild函数中更改状态变量、使用animateTo等功能,这可能会导致不稳定的UI表现。
// 可以理解为build执行完了,但是页面还没渲染
console.log('生命周期', 'onDidBuild');
}
onPageShow(): void {
//页面每次显示时触发一次,包括路由过程、应用进入前台等场景,仅@Entry装饰的自定义组件生效。
console.log('生命周期', 'onPageShow');
}
onPageHide(): void {
//页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景,仅@Entry装饰的自定义组件生效。
console.log('生命周期', 'onPageHide');
}
onBackPress(): boolean | void {
//当用户点击返回按钮时触发,仅@Entry装饰的自定义组件生效。
// 返回true表示页面自己处理返回逻辑,不进行页面路由;
// 返回false表示使用默认的路由返回逻辑,不设置返回值按照false处理。
console.log('生命周期', 'onBackPress');
}
aboutToReuse(): void {
// 当一个可复用的自定义组件从复用缓存中重新加入到节点树时,触发aboutToReuse生命周期回调,并将组件的构造参数传递给aboutToReuse。
}
}
2. UIAbility生命周期
UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// UIAbility实例处于完全关闭状态下被创建完成后进入该生命周期回调,执行初始化业务逻辑操作。
// 即UIAbility实例冷启动时进入该生命周期回调。同步接口,不支持异步回调。
console.log('UIAbility生命周期', 'onCreate');
}
onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
// UIAbility实例已经启动并在前台运行过,由于某些原因切换到后台,再次启动该UIAbility实例时会回调执行该方法。即UIAbility实例热启动时进入该生命周期回调。
// 例如调转到一个har页面,但退出了,在跳转到这个har页面,会触发。
AppStorage.set('price', want.parameters!.price)
}
// windowStage:窗口管理器。管理各个基本窗口单元,即Window实例。
// UIAbility实例创建完成之后,在进入Foreground之前,系统会创建一个WindowStage。
// WindowStage创建完成后会进入onWindowStageCreate()回调,可以在该回调中设置UI加载、设置WindowStage的事件订阅
onWindowStageCreate(windowStage: window.WindowStage): void {
// 当WindowStage创建后调用。
console.log('UIAbility生命周期', 'onWindowStageCreate');
class BlueColors implements CustomColors {
fontPrimary = '#ff00ff0f'
}
class PageCustomTheme implements CustomTheme {
colors?: CustomColors;
constructor(colors: CustomColors) {
this.colors = colors;
}
}
const BlueColorsTheme = new PageCustomTheme(new BlueColors())
ThemeControl.setDefaultTheme(BlueColorsTheme)
}
onWindowStageWillDestroy(windowStage: window.WindowStage): void {
// 当WindowStage即将销毁时调用。在WindowStage销毁前执行,此时WindowStage可以使用。
console.log('UIAbility生命周期', 'onWindowStageWillDestroy');
}
onWindowStageDestroy(): void {
// 当WindowStage销毁后调用。
console.log('UIAbility生命周期', 'onWindowStageDestroy');
}
// Foreground和Background状态分别在UIAbility实例切换至前台和切换至后台时触发,对应于onForeground()回调和onBackground()回调。
onForeground(): void {
// 当应用从后台转到前台时触发,
// 可以在onForeground()回调中申请系统需要的资源,或者重新申请在onBackground()中释放的资源。
console.log('UIAbility生命周期', 'onForeground');
}
onBackground(): void {
// UIAbility从前台切换至后台时候触发。可以在onBackground()回调中释放UI不可见时无用的资源,或者在此回调中执行较为耗时的操作,例如状态保存等。
console.log('UIAbility生命周期', 'onBackground');
}
onPrepareToTerminate(): boolean {
//在UIAbility关闭时触发, 是否执行UIAbility关闭操作,
//返回true表示本次UIAbility关闭流程取消,不再退出,返回false表示UIAbility继续正常关闭。
// 可以在这里做退出提示
// https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-app-ability-uiability-V5#uiabilityonpreparetoterminate10
console.log('UIAbility生命周期', 'onPrepareToTerminate');
return false
}
onBackPressed(): boolean {
// 当UIAbility侧滑返回时触发,根据返回值决定是否销毁UIAbility。
// 返回true表示UIAbility将会被移到后台不销毁,返回false表示UIAbility将正常销毁。
// 退出时销毁了相当于重新打开应用
console.log('UIAbility生命周期', 'onBackPressed');
return true
}
onDestroy(): void {
// Destroy状态在UIAbility实例销毁时触发。可以在onDestroy()回调中进行系统资源的释放、数据的保存等操作
// 例如调用terminateSelf()方法停止当前UIAbility实例,从而完成UIAbility实例的销毁;
// 或者用户使用最近任务列表关闭该UIAbility实例,完成UIAbility的销毁。
console.log('UIAbility生命周期', 'onDestroy');
}
// 除以上常用生命周期外,还有以下生命周期
// onWindowStageRestore: 当迁移多实例ability时,恢复WindowStage后调用。
// onContinue: 当Ability准备迁移时触发,保存数据。
// onDump: 转储客户端信息时调用,可用于转储非敏感信息。
// onSaveState: 该API配合appRecovery使用。在应用故障时,如果使能了自动保存状态,框架将回调onSaveState保存UIAbility状态。
// onShare: 在跨端分享场景下,在UIAbility中设置分享方设备要分享的数据。
}
3. 卡片生命周期
未完