一 UIAbility
UIAbility组件是一种包含UI的应用组件,主要用于和用户交互,一半是一个UIAbility
任务视图中看到一个任务,则建议使用一个UIAbility,多个页面的方式- 任务视图中看到多个任务,或者需要同时开启多个窗口,则建议使用多个UIAbility开发不同的模块功能
配置
在main下面的module.json5中,
- name :UIAbility组件的名称
- srcEntry:UIAbility组件的代码路径
- description:组件的描述信息
- icon 桌面上的icon
- startWindowIcon 启动页面中间的icon
- startWindowBackground 启动页面的背景颜色
"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组件启动页面背景颜色资源文件的索引
}
]
Ability
- onConfigurationUpdate 当系统配置更新时调用
- onMemoryLevel 当内存到达不同级别时系统回调该方法。
Ability 生命周期
下面是一个UIAbility的例子场景
- onCreate 应用创建,UIAbility实例创建完成时触发
- onWindowStageCreate 主Window创建完成 windowStage.loadContent 加载第一个组件
- onForeground 在前台
- onBackground 应用退到后台
- onWindowStageWillDestroy 即将被销毁
- onWindowStageDestroy window销毁,释放UI资源,例如在onWindowStageDestroy()中注销获焦/失焦等WindowStage事件
- onDestroy 应用销毁
- onWindowStageRestore Window重新创建的时候
AbilityLifecycleCallback
AbilityLifecycleCallback可以监听UIAbility的生命周期
- onAbilityCreate 注册监听应用上下文的生命周期后,在ability创建时触发回调。
- onWindowStageCreate 在window创建时触发回调
- onWindowStageActive 在window获焦时触发回调。
- onWindowStageInactive 在window失去焦点
- onWindowStageDestroy window销毁时
- onAbilityDestroy ability销毁时
- onAbilityForeground ability在前台
- onAbilityBackground ability在后台
- onAbilityContinue ability迁移时
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
// 1. 获取上下文
let applicationContext = this.context.getApplicationContext();
// 2.在onCreate 通过applicationContext注册监听应用内生命周期
// 把下面存到一个单利map中
let lifecycleId = applicationContext.on('abilityLifecycle', abilityLifecycleCallback);
console.log(`registerAbilityLifecycleCallback lifecycleId: ${GlobalContext.getContext().getObject('lifecycleId')}`);
// 3. 在 onDestroy 的时候要移除
applicationContext.off('abilityLifecycle', lifecycleId, (error) => {
if (error && error.code !== 0) {
// 出错
} else {
// 成功
}
})
}
--------------------------------------------------------------------
// 声明ability生命周期回调,需配置所有回调后才可以在applicationContext注册
let abilityLifecycleCallback: AbilityLifecycleCallback = {
onAbilityCreate(ability){
console.log('AbilityLifecycleCallback onAbilityCreate.');
},
onWindowStageCreate(ability, windowStage){
console.log('AbilityLifecycleCallback onWindowStageCreate.');
},
onWindowStageActive(ability, windowStage){
console.log('AbilityLifecycleCallback onWindowStageActive.');
},
onWindowStageInactive(ability, windowStage){
console.log('AbilityLifecycleCallback onWindowStageInactive.');
},
onWindowStageDestroy(ability, windowStage){
console.log('AbilityLifecycleCallback onWindowStageDestroy.');
},
onAbilityDestroy(ability){
console.log('AbilityLifecycleCallback onAbilityDestroy.');
},
onAbilityForeground(ability){
console.log('AbilityLifecycleCallback onAbilityForeground.');
},
onAbilityBackground(ability){
console.log('AbilityLifecycleCallback onAbilityBackground.');
},
onAbilityContinue(ability){
console.log('AbilityLifecycleCallback onAbilityContinue.');
}
};
其他的先不考虑了,其他都是关于多 UIAbility
二 Entry装饰的组件生命周期,提供以下生命周期接口:
- onPageShow 页面每次显示时触发一次,包括路由过程、应用进入前台等场景。相当于onReusme
- onPageHide 页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。相当于onPause
- onBackPress 当用户点击返回按钮时触发。
Component装饰的自定义组件的生命周期,提供以下生命周期接口:
- aboutToAppear组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行。
- onWillApplyThemeonWillApplyTheme函数用于获取当前组件上下文的Theme对象,在创建自定义组件的新实例后,在执行其build()函数之前执行。允许在onWillApplyTheme函数中改变状态变量,更改将在后续执行build()函数中生效。
- onDidBuild 组件build()函数执行完成之后回调该接口,不建议在onDidBuild函数中更改状态变量、使用animateTo等功能,这可能会导致不稳定的UI表现。
- aboutToDisappear aboutToDisappear函数在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定,当
if else 添加或移除的时候也会执行这里 - aboutToReuse 当@Component 有
@Reusable这个修饰的时候,证明可以服用,当第二次添加的时候,只会走这个方法,上面方法不会再走了
组件方法
getUIContext
getUIContext(): UIContext
获取UIContext对象。
getUniqueId
getUniqueId(): number
获取当前Component的UniqueId。UniqueId为系统为每个组件分配的Id,可保证唯一性。若在组件未构建时获取,返回无效UniqueId:-1。
queryNavDestinationInfo
queryNavDestinationInfo(): NavDestinationInfo | undefined;
查询自定义组件所属的NavDestination信息。
queryNavigationInfo
queryNavigationInfo(): NavigationInfo | undefined
查询自定义组件所属的Navigation信息。
queryRouterPageInfo
queryRouterPageInfo(): RouterPageInfo | undefined;
获取RouterPageInfo实例对象。