1. 应用生命周期(Ability):

  • 概念:指从应用启动到销毁的整个过程,包括应用的创建、初始化、前台运行、后台运行和销毁等阶段。
  • 作用:通过特定的回调函数来实现各个阶段,开发者可以在这些回调中执行相应的操作,如在创建阶段初始化应用所需的数据和资源,在销毁阶段释放所有占用的系统资源,并保存必要的数据。
  • 
     // 1. 应用初始化(冷启动)
      onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
        console.log('应用创建:初始化数据库连接')
        AppStorage.setOrCreate('userToken', '') // 全局状态初始化
      }
    
      // 2. 窗口准备就绪
      onWindowStageCreate(windowStage: window.WindowStage) {
        windowStage.loadContent('pages/Index', (err) => {
          if (err) console.error('UI加载失败')
        })
      }
    
      // 3. 应用切回前台(热启动)
      onForeground() {
        console.log('恢复后台暂停的音频播放')
        BackgroundTaskManager.cancelSuspend() // 唤醒后台任务
      }
    
      // 4. 应用退至后台
      onBackground() {
        console.log('释放摄像头等独占资源')
        LocalStorage.set('tempData', this.cacheData) // 临时保存现场数据
      }
    
      // 5. 窗口销毁
      onWindowStageDestroy() {
        this.releaseGLResources() // 释放OpenGL纹理
      }
    
      // 6. 应用彻底销毁
      onDestroy() {
        Database.closeConnection() // 关闭持久化连接
      }
    

    2. 页面生命周期:

  • 概念:主要针对@Entry修饰的组件,即页面。
  • 作用:帮助开发者更好地管理页面的显示和隐藏,以及处理页面间的跳转等情况,以提供更好的用户体验。
  • @Entry
    @ComponentV2
    struct TaskDetailPage {
      @State taskData: TaskModel = new TaskModel()
    
      // 1. 页面即将可见
      aboutToAppear() {
        const taskId = Router.getParam('taskId')
        this.taskData = Database.queryTask(taskId) // 加载页面数据
      }
    
      // 2. 页面完全可见
      onPageShow() {
        Analytics.trackPageView('任务详情页') // 埋点统计
        this.startTimerAnimation() // 启动交互动画
      }
    
      // 3. 页面即将离开
      aboutToDisappear() {
        this.autoSaveDraft() // 自动保存草稿
      }
    
      // 4. 页面完全隐藏
      onPageHide() {
        this.pauseVideoPlayer() // 暂停媒体播放
      }
    
      // 5. 物理返回键拦截
      onBackPress(): boolean {
        if (this.hasUnsavedChanges) {
          Dialog.confirm('确定放弃编辑?')
          return true // 拦截返回操作
        }
        return false
      }
    
      build() { ... }
    }
    

    3. 组件生命周期

  • 概念:自定义组件从创建到销毁或复用的过程。
  • 作用:使开发者能够在组件的不同阶段进行相应的操作,如初始化组件状态、释放组件资源等,有助于提高组件的可维护性和性能。
  • @ComponentV2
    struct CountdownItem {
      @Prop timerConfig: TimerConfig // 父组件传入配置
      @Link @Watch('onCountdownEnd') remainingTime: number
    
      // 组件挂载时启动计时器
      aboutToAppear() {
        this.timer = setInterval(() => {
          this.remainingTime--
        }, 1000)
      }
    
      // 组件销毁时清理资源
      aboutToDisappear() {
        clearInterval(this.timer)
        console.log('释放计时器资源')
      }
    
      // 监听时间归零
      onCountdownEnd() {
        if (this.remainingTime <= 0) {
          Vibrator.vibrate(1000) // 震动提醒
        }
      }
    
      build() {
        Progress({ value: this.remainingTime / this.timerConfig.totalTime })
          .width('100%')
      }
    }
    

    深入理解鸿蒙生命周期如同掌握应用的心跳节奏,通过合理利用七个核心回调函数:

  • 资源调度:在onCreate/onDestroy管理全局资源
  • 状态同步:用aboutToAppear/disappear保持UI一致性
  • 体验优化:借onPageShow/Hide实现无缝切换
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐