HarmonyOS开发之生命周期

文章目录


提示:以下是本篇文章正文内容,下面案例可供参考

一、应用生命周期

可以在项目目录 entryability/EntryAbility.tes 看到整个应用的生命周期

cpp 复制代码
import hilog from '@ohos.hilog';
import UIAbility from '@ohos.app.ability.UIAbility';
import Window from '@ohos.window';
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
// @ts-ignore
// 集成云端SDK
import json from '../agconnect-services.json';
// @ts-ignore
import { initialize } from '@hw-agconnect/hmcore';

// 引入云函数
import cloud from "@hw-agconnect/cloud"


//以下为生命周期执行过程   按照生命周期执行顺序描述
export default class EntryAbility extends UIAbility {


  //onCreate 实例创建执行,进行一些应用初始化方法
  //1.数据准备、变量初始化等 未涉及到UI界面
  onCreate() {
    // 初始化使用SDK
    initialize(this.context,json);
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  }
  

	//2. 当应用的窗口被创建时调用。应用开始展示用户界面
	//窗口分为主窗口和子窗口(主窗口子窗口创建时,都会调用)
	//主窗口:通常在应用启动时创建,用户最初看到的窗口。
    //子窗口:可能在应用运行过程中动态创建,用于显示附加内容或功能(悬浮框)
  onWindowStageCreate(windowStage: Window.WindowStage) {
    let page = 'login';
    // 云函数提供的getCurrentUser 判断是否登录
    cloud.auth().getCurrentUser().then(user=>{
      // 登录跳转首页否则跳转登录页
      if(user){
        page= 'Index'
      }
      windowStage.loadContent('pages/'+page, (err, data) => {
        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. Data: %      {public}s', JSON.stringify(data) ?? '');
      });
    })
  }


  //3.应用从后台切换到前台时调用 (在UIAbility的UI可见之前)
  //恢复应用的正常功能,重新启动暂停的任务。
  //此回调适用于主窗口和子窗口,确保窗口内容在前台时的正常显示和交互。
  //可以在onForeground()回调中申请系统需要的资源.
  //或者重新申请在onBackground()中释放的资源
  onForeground() {
    // Ability has brought to foreground
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
  }


 //4.当应用从前台切换到后台时调用 (UIAbility的UI完全不可见之后)
 //暂停或优化后台运行的任务,节省资源。
 //此回调适用于主窗口和子窗口,暂停窗口内容的更新或动画等。
 //释放UI不可见时无用的资源,或者在此回调中执行较为耗时的操作,例如状态保存等
 onBackground() {
    // Ability has back to background
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
  }


//5.当主窗口或子窗口被销毁时调用
//清理与窗口相关的资源,解绑事件监听器。适用于窗口级别的资源清理
onWindowStageDestroy() {
    // Main window is destroyed, release UI related resources
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
  }


//6.当应用完全退出时调用
//彻底清理应用级别的所有资源,释放内存,关闭数据库连接等。
//应用进程结束后,所有资源将被释放
 onDestroy() {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  }

}

二、页面生命周期

页面生命周期,即被@Entry装饰的组件生命周期,提供以下生命周期接口:
此处引用

onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景,仅@Entry装饰的自定义组件生效。


onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景,仅@Entry装饰的自定义组件生效。


onBackPress:当用户点击返回按钮时触发,仅@Entry装饰的自定义组件生效。

cpp 复制代码
@Entry
@Component
struct IndexComponent {
  onPageShow() {
     //页面每次显示时触发
    console.info('IndexComponent onPageShow');
  }

  onPageHide() {
    //页面每次隐藏时触发
    console.info('IndexComponent onPageHide');
  }

  onBackPress() {
    //当用户点击返回按钮时触发
    console.info('IndexComponent onBackPress');
  }

  build() {
    Column() {
      Text('Hello World')
        .fontSize(30)
        .margin(30)
    }.width('100%')
  }
}

二、组件生命周期

cpp 复制代码
 aboutToAppear(){
    //组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后
    // ,在执行其build()函数之前执行。
 }
 aboutToDisappear(){
    //在自定义组件析构销毁之前执行
 }
相关推荐
智塑未来4 小时前
鸿蒙游戏体验手册:四种能力从性能到玩法逐一解锁
游戏·华为·harmonyos
math_hongfan5 小时前
鸿蒙离线数据缓存高级架构:弱网预加载/离线数据优先级/同步冲突解决/上线后数据合并策略
学习·缓存·华为·架构·harmonyos·鸿蒙
math_hongfan8 小时前
鸿蒙企业级数据存储高级架构:从读写分离到冷热数据分层/归档策略/数据生命周期管理最佳实践
人工智能·学习·华为·架构·harmonyos·鸿蒙
math_hongfan11 小时前
鸿蒙存储异常高级排查:文件损坏检测/数据恢复/读写失败重试/磁盘空间预警系统性根治方案
学习·华为·harmonyos·鸿蒙
lilian23311 小时前
Harmony os 技术实战|拼豆制图10:把取消、解析失败和保存失败写成可恢复状态机
java·javascript·华为·harmonyos
2501_9197490311 小时前
华为鸿蒙美缝剂实用APP—小羊美缝
华为·harmonyos
2501_9197490311 小时前
华为鸿蒙积攒年度高光APP—小羊高光
华为·harmonyos
智塑未来12 小时前
鸿蒙7碰一碰智感交互——碰哪儿传哪儿
华为·harmonyos
math_hongfan12 小时前
鸿蒙存储碎片高级清理机制:数据库Vacuum/文件碎片整理/缓存过期清理/主动空间回收策略
jvm·数据库·学习·缓存·华为·harmonyos·鸿蒙
梦想不只是梦与想12 小时前
鸿蒙UI测试框架:UITest
harmonyos·uitest·ui测试框架