0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【HarmonyOS 5】鸿蒙中的UIAbility详解(三)

HarmonyOS解决方案 来源:HarmonyOS解决方案 作者:HarmonyOS解决方案 2025-06-14 22:32 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

HarmonyOS 5】鸿蒙中的UIAbility详解(三)

##鸿蒙开发能力 ##HarmonyOS SDK应用服务##鸿蒙金融类应用 (金融理财#

一、前言

本文是鸿蒙中的UIAbility详解系列的最终章。主要针对UIAbility的冷启动和热启动,对于want数据的处理。UIAbility的备份恢复,UIAbility的接续等高级功能的概念和使用讲解。

二、UIAbility启动模式:冷启动与热启动的Want数据处理

1. 冷启动(Cold Start)

应用首次启动或被系统完全终止后重新创建。

冷启动,应用会从onCreate函数中进入,通过want参数,我们可以处理其中携带的信息。像applink就是uri,deeplink就是parameters?.deepLink,还有推送等。

核心逻辑很简单,根据want中对应需要处理的字段信息,进行逻辑处理(跳转目标页面,数据和业务处理等)。

onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
  const deepLinkData = want.parameters?.deepLink; // 解析深层链接参数
  this.initData(deepLinkData);
}

2. 热启动(Warm Start)

应用在后台运行时被重新激活(如切换任务或接收新事件)。

一般和冷启动处理是一对儿,处理逻辑也和冷启动一致。只不过此时应用从onNewWant函数跳进来。时机也是App已经创建了,此时又被激活。

onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam) {
  if (launchParam.launchReason === AbilityConstant.LaunchReason.NEW_WANT) {
    const updateData = want.parameters?.updateData; // 解析热启动参数
    this.refreshUI(updateData);
  }
}

总结:冷热启动区别对比

特性冷启动热启动
触发条件首次启动/进程终止后重启从后台唤醒/接收新Want
生命周期入口onCreateonNewWant(单实例)
页面栈处理重建页面栈恢复现有页面栈
Want参数来源启动时指定(如图标点击、链接)运行中动态传入(如跨Ability调用)

3. 源码示例

// EntryAbility.ets
export default class EntryAbility extends UIAbility {
  private selectPage: string = '';

  // 冷启动时触发
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
    this.parseParams(want); // 解析参数
  }

  // 热启动时触发
  onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam) {
    this.parseParams(want); // 解析参数
    if (this.currentWindowStage) {
      this.onWindowStageCreate(this.currentWindowStage); // 重新加载页面
    }
  }

  // 解析参数逻辑
  private parseParams(want: Want) {
    if (want.parameters?.params) {
      const params = JSON.parse(want.parameters.params as string);
      this.selectPage = params.targetPage; // 获取目标页面标识(funA/funB)
    }
  }

  // 加载页面
  onWindowStageCreate(windowStage: window.WindowStage) {
    let targetPage = 'pages/Index'; // 默认页面
    switch (this.selectPage) {
      case 'funA': targetPage = 'pages/FunA'; break;
      case 'funB': targetPage = 'pages/FunB'; break;
    }
    windowStage.loadContent(targetPage); // 加载对应页面
  }
}

二、UIAbility备份恢复:保障异常终止后的状态延续

应用因系统资源不足被后台终止时,自动保存状态。
下次启动时还原数据(如编辑中的内容、页面位置)。

1. 启用备份功能

onCreate中调用setRestoreEnabled(true)

export default class EntryAbility extends UIAbility {
  onCreate() {
    this.context.setRestoreEnabled(true); // 初始化时启用备份
  }
}

2. 保存自定义数据

重写onSaveState方法,通过WantParams存储数据:

onSaveState(state: AbilityConstant.StateType, wantParams: Record< string, Object >) {
  wantParams["editorContent"] = this.editor.getText(); // 保存编辑内容
  wantParams["currentPage"] = this.router.getCurrentPage(); // 保存页面路由
  return AbilityConstant.OnSaveResult.ALL_AGREE;
}

3. 恢复数据

onCreateonNewWant中解析参数:

onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
  if (want.parameters?.editorContent) {
    this.editor.setText(want.parameters.editorContent as string); // 恢复文本
    this.router.navigateTo(want.parameters.currentPage as string); // 恢复页面路由
  }
}

注意

1. 数据限制 :单次备份最大200KB,存储时效7天,重启设备不保留。
2. 适用场景 :临时数据(如未保存的表单)、页面状态(如滚动位置), 不建议存储敏感数据
3. 性能优化 :避免在onSaveState中执行耗时操作,优先存储关键状态。

三、应用接续(Continuation):跨设备任务无缝迁移

将当前页面状态、路由信息迁移至另一设备(如手机→平板)。
支持按场景开启/关闭迁移(如仅在编辑页允许迁移)。
小数据通过wantParam传输(≤100KB),大数据使用分布式数据对象(DDO)。

1. 配置可迁移能力

module.json5中设置continuable: true

{
  "abilities": [
    {
      "name": "EditorAbility",
      "continuable": true // 启用跨设备迁移
    }
  ]
}

2. 源端(发起迁移设备)实现

onContinue回调:保存数据、校验兼容性、决定是否迁移。

onContinue(wantParam: Record< string, Object >): OnContinueResult {
  // 校验目标设备版本
  if (wantParam.version < MIN_SUPPORT_VERSION) return MISMATCH;
  
  // 保存编辑内容
  wantParam["editorData"] = this.editor.getData();
  
  // 动态控制迁移状态(如仅在编辑页允许迁移)
  if (this.currentPage !== 'EditorPage') return REJECT;
  
  return AGREE;
}

4. 目标端(接收设备)恢复

冷启动时通过onCreate恢复,热启动时通过onNewWant恢复:

onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
  if (launchParam.launchReason === CONTINUATION) {
    const editorData = want.parameters?.editorData;
    this.editor.setData(editorData); // 恢复数据
    this.context.restoreWindowStage(); // 自动恢复页面栈
  }
}

注意

1. 针对动态开关迁移 :通过setMissionContinueState控制(如在非编辑页禁用):

// 在非编辑页关闭迁移
this.context.setMissionContinueState(AbilityConstant.ContinueState.INACTIVE);

2. 针对自定义页面栈 :关闭自动恢复,手动指定目标页面:

onContinue(wantParam) {
  wantParam[wantConstant.Params.SUPPORT_CONTINUE_PAGE_STACK_KEY] = false; // 禁用自动恢复
  wantParam["targetPage"] = "SummaryPage"; // 自定义目标页面
}

3. 针对大数据迁移 :使用分布式数据对象(DDO)同步文件或大文本:

// 源端创建DDO并保存
const ddo = distributedDataObject.create(this.context, largeData);
wantParam["ddoSessionId"] = ddo.genSessionId(); // 传递会话ID至目标端

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    60

    文章

    2853

    浏览量

    45340
  • HarmonyOS
    +关注

    关注

    80

    文章

    2146

    浏览量

    35536
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入理解HarmonyOS UIAbility:生命周期、WindowStage与启动模式探析

    UIAbility组件概述 UIAbility组件是HarmonyOS中一种包含UI界面的应用组件,主要用于与用户进行交互。每个UIAbility组件实例对应最近任务列表
    的头像 发表于 02-17 15:33 2842次阅读
    深入理解<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>UIAbility</b>:生命周期、WindowStage与启动模式探析

    HarmonyOS开发案例:【UIAbility内和UIAbility间页面的跳转】

    基于Stage模型下的UIAbility开发,实现UIAbility内和UIAbility间页面的跳转。
    的头像 发表于 05-09 15:06 2499次阅读
    <b class='flag-5'>HarmonyOS</b>开发案例:【<b class='flag-5'>UIAbility</b>内和<b class='flag-5'>UIAbility</b>间页面的跳转】

    鸿蒙Ability Kit(程序框架服务)【UIAbility内和UIAbility间页面的跳转】

    基于Stage模型下的UIAbility开发,实现UIAbility内和UIAbility间页面的跳转。
    的头像 发表于 06-03 14:13 1657次阅读
    <b class='flag-5'>鸿蒙</b>Ability Kit(程序框架服务)【<b class='flag-5'>UIAbility</b>内和<b class='flag-5'>UIAbility</b>间页面的跳转】

    HarmonyOS 5】VisionKit人脸活体检测详解

    HarmonyOS 5】VisionKit人脸活体检测详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 06-21 11:52 628次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】VisionKit人脸活体检测<b class='flag-5'>详解</b>

    HarmonyOS 5 makeObserved接口详解

    HarmonyOS 5】makeObserved接口详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 06-16 17:58 516次阅读

    HarmonyOS 5鸿蒙应用隐私保护详解

    HarmonyOS 5鸿蒙应用隐私保护详解 ##鸿蒙开发能力 ##HarmonyOS SDK
    的头像 发表于 07-11 18:30 941次阅读

    HarmonyOS 5鸿蒙中进度条的使用详解

    HarmonyOS 5鸿蒙中进度条的使用详解 ##鸿蒙开发能力 ##HarmonyOS SD
    的头像 发表于 07-11 18:26 708次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鸿蒙</b>中进度条的使用<b class='flag-5'>详解</b>

    HarmonyOS 5鸿蒙星闪NearLink详解

    HarmonyOS 5鸿蒙星闪NearLink详解 ##鸿蒙开发能力 ##HarmonyOS
    的头像 发表于 07-11 18:24 1481次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鸿蒙</b>星闪NearLink<b class='flag-5'>详解</b>

    HarmonyOS 5鸿蒙mPaaS详解

    HarmonyOS 5鸿蒙mPaaS详解 ##鸿蒙开发能力 ##HarmonyOS SDK应
    的头像 发表于 07-11 18:23 658次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鸿蒙</b>mPaaS<b class='flag-5'>详解</b>

    HarmonyOS 5】金融应用开发鸿蒙组件实践

    HarmonyOS 5】金融应用开发鸿蒙组件实践 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 07-11 18:20 743次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】金融应用开发<b class='flag-5'>鸿蒙</b>组件实践

    HarmonyOS 5鸿蒙UIAbility详解(二)

    HarmonyOS 5鸿蒙UIAbility详解(二) ##
    的头像 发表于 07-11 18:17 680次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鸿蒙</b><b class='flag-5'>中</b>的<b class='flag-5'>UIAbility</b><b class='flag-5'>详解</b>(二)

    HarmonyOS 5】桌面快捷方式功能实现详解

    HarmonyOS 5】桌面快捷方式功能实现详解 ##鸿蒙开发能力 ##HarmonyOS SDK应用服务##
    的头像 发表于 06-21 16:42 1775次阅读
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】桌面快捷方式功能实现<b class='flag-5'>详解</b>

    HarmonyOS 5 入门系列 】鸿蒙HarmonyOS示例项目讲解

    HarmonyOS 5 入门系列 】鸿蒙HarmonyOS示例项目讲解 ##鸿蒙开发能力 ##Har
    的头像 发表于 07-07 11:57 793次阅读
    【 <b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b> 入门系列 】<b class='flag-5'>鸿蒙</b><b class='flag-5'>HarmonyOS</b>示例项目讲解

    鸿蒙Stage模型与FA模型详解

    HarmonyOS 5鸿蒙Stage模型与FA模型详解 ##鸿蒙开发能力 ##
    的头像 发表于 07-07 11:50 617次阅读

    鸿蒙应用px,vp,fp概念详解

    HarmonyOS 5鸿蒙应用px,vp,fp概念详解 ##鸿蒙开发能力 ##HarmonyOS
    的头像 发表于 07-07 11:48 989次阅读
    <b class='flag-5'>鸿蒙</b>应用px,vp,fp概念<b class='flag-5'>详解</b>