91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【HarmonyOS 5】鴻蒙中的UIAbility詳解(三)

HarmonyOS解決方案 ? 來源:HarmonyOS解決方案 ? 作者:HarmonyOS解決方案 ? 2025-06-14 22:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

HarmonyOS 5】鴻蒙中的UIAbility詳解(三)

##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財(cái)#

一、前言

本文是鴻蒙中的UIAbility詳解系列的最終章。主要針對(duì)UIAbility的冷啟動(dòng)和熱啟動(dòng),對(duì)于want數(shù)據(jù)的處理。UIAbility的備份恢復(fù),UIAbility的接續(xù)等高級(jí)功能的概念和使用講解。

二、UIAbility啟動(dòng)模式:冷啟動(dòng)與熱啟動(dòng)的Want數(shù)據(jù)處理

1. 冷啟動(dòng)(Cold Start)

應(yīng)用首次啟動(dòng)或被系統(tǒng)完全終止后重新創(chuàng)建。

冷啟動(dòng),應(yīng)用會(huì)從onCreate函數(shù)中進(jìn)入,通過want參數(shù),我們可以處理其中攜帶的信息。像applink就是uri,deeplink就是parameters?.deepLink,還有推送等。

核心邏輯很簡(jiǎn)單,根據(jù)want中對(duì)應(yīng)需要處理的字段信息,進(jìn)行邏輯處理(跳轉(zhuǎn)目標(biāo)頁(yè)面,數(shù)據(jù)和業(yè)務(wù)處理等)。

onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
  const deepLinkData = want.parameters?.deepLink; // 解析深層鏈接參數(shù)
  this.initData(deepLinkData);
}

2. 熱啟動(dòng)(Warm Start)

應(yīng)用在后臺(tái)運(yùn)行時(shí)被重新激活(如切換任務(wù)或接收新事件)。

一般和冷啟動(dòng)處理是一對(duì)兒,處理邏輯也和冷啟動(dòng)一致。只不過此時(shí)應(yīng)用從onNewWant函數(shù)跳進(jìn)來。時(shí)機(jī)也是App已經(jīng)創(chuàng)建了,此時(shí)又被激活。

onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam) {
  if (launchParam.launchReason === AbilityConstant.LaunchReason.NEW_WANT) {
    const updateData = want.parameters?.updateData; // 解析熱啟動(dòng)參數(shù)
    this.refreshUI(updateData);
  }
}

總結(jié):冷熱啟動(dòng)區(qū)別對(duì)比

特性冷啟動(dòng)熱啟動(dòng)
觸發(fā)條件首次啟動(dòng)/進(jìn)程終止后重啟從后臺(tái)喚醒/接收新Want
生命周期入口onCreateonNewWant(單實(shí)例)
頁(yè)面棧處理重建頁(yè)面棧恢復(fù)現(xiàn)有頁(yè)面棧
Want參數(shù)來源啟動(dòng)時(shí)指定(如圖標(biāo)點(diǎn)擊、鏈接)運(yùn)行中動(dòng)態(tài)傳入(如跨Ability調(diào)用)

3. 源碼示例

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

  // 冷啟動(dòng)時(shí)觸發(fā)
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
    this.parseParams(want); // 解析參數(shù)
  }

  // 熱啟動(dòng)時(shí)觸發(fā)
  onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam) {
    this.parseParams(want); // 解析參數(shù)
    if (this.currentWindowStage) {
      this.onWindowStageCreate(this.currentWindowStage); // 重新加載頁(yè)面
    }
  }

  // 解析參數(shù)邏輯
  private parseParams(want: Want) {
    if (want.parameters?.params) {
      const params = JSON.parse(want.parameters.params as string);
      this.selectPage = params.targetPage; // 獲取目標(biāo)頁(yè)面標(biāo)識(shí)(funA/funB)
    }
  }

  // 加載頁(yè)面
  onWindowStageCreate(windowStage: window.WindowStage) {
    let targetPage = 'pages/Index'; // 默認(rèn)頁(yè)面
    switch (this.selectPage) {
      case 'funA': targetPage = 'pages/FunA'; break;
      case 'funB': targetPage = 'pages/FunB'; break;
    }
    windowStage.loadContent(targetPage); // 加載對(duì)應(yīng)頁(yè)面
  }
}

二、UIAbility備份恢復(fù):保障異常終止后的狀態(tài)延續(xù)

應(yīng)用因系統(tǒng)資源不足被后臺(tái)終止時(shí),自動(dòng)保存狀態(tài)。
下次啟動(dòng)時(shí)還原數(shù)據(jù)(如編輯中的內(nèi)容、頁(yè)面位置)。

1. 啟用備份功能

onCreate中調(diào)用setRestoreEnabled(true)

export default class EntryAbility extends UIAbility {
  onCreate() {
    this.context.setRestoreEnabled(true); // 初始化時(shí)啟用備份
  }
}

2. 保存自定義數(shù)據(jù)

重寫onSaveState方法,通過WantParams存儲(chǔ)數(shù)據(jù):

onSaveState(state: AbilityConstant.StateType, wantParams: Record< string, Object >) {
  wantParams["editorContent"] = this.editor.getText(); // 保存編輯內(nèi)容
  wantParams["currentPage"] = this.router.getCurrentPage(); // 保存頁(yè)面路由
  return AbilityConstant.OnSaveResult.ALL_AGREE;
}

3. 恢復(fù)數(shù)據(jù)

onCreateonNewWant中解析參數(shù):

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

注意

1. 數(shù)據(jù)限制 :?jiǎn)未蝹浞葑畲?00KB,存儲(chǔ)時(shí)效7天,重啟設(shè)備不保留。
2. 適用場(chǎng)景 :臨時(shí)數(shù)據(jù)(如未保存的表單)、頁(yè)面狀態(tài)(如滾動(dòng)位置), 不建議存儲(chǔ)敏感數(shù)據(jù)
3. 性能優(yōu)化 :避免在onSaveState中執(zhí)行耗時(shí)操作,優(yōu)先存儲(chǔ)關(guān)鍵狀態(tài)。

三、應(yīng)用接續(xù)(Continuation):跨設(shè)備任務(wù)無縫遷移

將當(dāng)前頁(yè)面狀態(tài)、路由信息遷移至另一設(shè)備(如手機(jī)→平板)。
支持按場(chǎng)景開啟/關(guān)閉遷移(如僅在編輯頁(yè)允許遷移)。
小數(shù)據(jù)通過wantParam傳輸(≤100KB),大數(shù)據(jù)使用分布式數(shù)據(jù)對(duì)象(DDO)。

1. 配置可遷移能力

module.json5中設(shè)置continuable: true

{
  "abilities": [
    {
      "name": "EditorAbility",
      "continuable": true // 啟用跨設(shè)備遷移
    }
  ]
}

2. 源端(發(fā)起遷移設(shè)備)實(shí)現(xiàn)

onContinue回調(diào):保存數(shù)據(jù)、校驗(yàn)兼容性、決定是否遷移。

onContinue(wantParam: Record< string, Object >): OnContinueResult {
  // 校驗(yàn)?zāi)繕?biāo)設(shè)備版本
  if (wantParam.version < MIN_SUPPORT_VERSION) return MISMATCH;
  
  // 保存編輯內(nèi)容
  wantParam["editorData"] = this.editor.getData();
  
  // 動(dòng)態(tài)控制遷移狀態(tài)(如僅在編輯頁(yè)允許遷移)
  if (this.currentPage !== 'EditorPage') return REJECT;
  
  return AGREE;
}

4. 目標(biāo)端(接收設(shè)備)恢復(fù)

冷啟動(dòng)時(shí)通過onCreate恢復(fù),熱啟動(dòng)時(shí)通過onNewWant恢復(fù):

onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
  if (launchParam.launchReason === CONTINUATION) {
    const editorData = want.parameters?.editorData;
    this.editor.setData(editorData); // 恢復(fù)數(shù)據(jù)
    this.context.restoreWindowStage(); // 自動(dòng)恢復(fù)頁(yè)面棧
  }
}

注意

1. 針對(duì)動(dòng)態(tài)開關(guān)遷移 :通過setMissionContinueState控制(如在非編輯頁(yè)禁用):

// 在非編輯頁(yè)關(guān)閉遷移
this.context.setMissionContinueState(AbilityConstant.ContinueState.INACTIVE);

2. 針對(duì)自定義頁(yè)面棧 :關(guān)閉自動(dòng)恢復(fù),手動(dòng)指定目標(biāo)頁(yè)面:

onContinue(wantParam) {
  wantParam[wantConstant.Params.SUPPORT_CONTINUE_PAGE_STACK_KEY] = false; // 禁用自動(dòng)恢復(fù)
  wantParam["targetPage"] = "SummaryPage"; // 自定義目標(biāo)頁(yè)面
}

3. 針對(duì)大數(shù)據(jù)遷移 :使用分布式數(shù)據(jù)對(duì)象(DDO)同步文件或大文本:

// 源端創(chuàng)建DDO并保存
const ddo = distributedDataObject.create(this.context, largeData);
wantParam["ddoSessionId"] = ddo.genSessionId(); // 傳遞會(huì)話ID至目標(biāo)端

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2613

    瀏覽量

    44011
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2121

    瀏覽量

    32916
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    深入理解HarmonyOS UIAbility:生命周期、WindowStage與啟動(dòng)模式探析

    UIAbility組件概述 UIAbility組件是HarmonyOS中一種包含UI界面的應(yīng)用組件,主要用于與用戶進(jìn)行交互。每個(gè)UIAbility組件實(shí)例對(duì)應(yīng)最近任務(wù)列表
    的頭像 發(fā)表于 02-17 15:33 ?2207次閱讀
    深入理解<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>UIAbility</b>:生命周期、WindowStage與啟動(dòng)模式探析

    HarmonyOS開發(fā)案例:【UIAbility內(nèi)和UIAbility間頁(yè)面的跳轉(zhuǎn)】

    基于Stage模型下的UIAbility開發(fā),實(shí)現(xiàn)UIAbility內(nèi)和UIAbility間頁(yè)面的跳轉(zhuǎn)。
    的頭像 發(fā)表于 05-09 15:06 ?2208次閱讀
    <b class='flag-5'>HarmonyOS</b>開發(fā)案例:【<b class='flag-5'>UIAbility</b>內(nèi)和<b class='flag-5'>UIAbility</b>間頁(yè)面的跳轉(zhuǎn)】

    鴻蒙開發(fā)-應(yīng)用程序框架UIAbility的使用

    ,都對(duì)應(yīng)于一個(gè)最近任務(wù)列表的任務(wù)。 一個(gè)應(yīng)用可以有一個(gè)UIAbility,也可以有多個(gè)UIAbility,如下圖所示。例如瀏覽器應(yīng)用可以通過一個(gè)UIAbility結(jié)合多頁(yè)面的形式讓用
    發(fā)表于 01-17 16:36

    HarmonyOS 5】VisionKit人臉活體檢測(cè)詳解

    HarmonyOS 5】VisionKit人臉活體檢測(cè)詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 06-21 11:52 ?277次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】VisionKit人臉活體檢測(cè)<b class='flag-5'>詳解</b>

    HarmonyOS 5 makeObserved接口詳解

    HarmonyOS 5】makeObserved接口詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 06-16 17:58 ?273次閱讀

    HarmonyOS 5鴻蒙應(yīng)用隱私保護(hù)詳解

    HarmonyOS 5鴻蒙應(yīng)用隱私保護(hù)詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK
    的頭像 發(fā)表于 07-11 18:30 ?253次閱讀

    HarmonyOS 5鴻蒙中進(jìn)度條的使用詳解

    HarmonyOS 5鴻蒙中進(jìn)度條的使用詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SD
    的頭像 發(fā)表于 07-11 18:26 ?194次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】<b class='flag-5'>鴻蒙</b>中進(jìn)度條的使用<b class='flag-5'>詳解</b>

    HarmonyOS 5鴻蒙星閃NearLink詳解

    HarmonyOS 5鴻蒙星閃NearLink詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS
    的頭像 發(fā)表于 07-11 18:24 ?281次閱讀
    【<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詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)
    的頭像 發(fā)表于 07-11 18:23 ?255次閱讀
    【<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】金融應(yīng)用開發(fā)鴻蒙組件實(shí)踐

    HarmonyOS 5】金融應(yīng)用開發(fā)鴻蒙組件實(shí)踐 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 07-11 18:20 ?256次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】金融應(yīng)用開發(fā)<b class='flag-5'>鴻蒙</b>組件實(shí)踐

    HarmonyOS 5鴻蒙UIAbility詳解(二)

    HarmonyOS 5鴻蒙UIAbility詳解(二) ##
    的頭像 發(fā)表于 07-11 18:17 ?226次閱讀
    【<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】桌面快捷方式功能實(shí)現(xiàn)詳解

    HarmonyOS 5】桌面快捷方式功能實(shí)現(xiàn)詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 06-21 16:42 ?275次閱讀
    【<b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b>】桌面快捷方式功能實(shí)現(xiàn)<b class='flag-5'>詳解</b>

    HarmonyOS 5 入門系列 】鴻蒙HarmonyOS示例項(xiàng)目講解

    HarmonyOS 5 入門系列 】鴻蒙HarmonyOS示例項(xiàng)目講解 ##鴻蒙開發(fā)能力 ##Har
    的頭像 發(fā)表于 07-07 11:57 ?138次閱讀
    【 <b class='flag-5'>HarmonyOS</b> <b class='flag-5'>5</b> 入門系列 】<b class='flag-5'>鴻蒙</b><b class='flag-5'>HarmonyOS</b>示例項(xiàng)目講解

    鴻蒙Stage模型與FA模型詳解

    HarmonyOS 5鴻蒙Stage模型與FA模型詳解 ##鴻蒙開發(fā)能力 ##
    的頭像 發(fā)表于 07-07 11:50 ?147次閱讀

    鴻蒙應(yīng)用px,vp,fp概念詳解

    HarmonyOS 5鴻蒙應(yīng)用px,vp,fp概念詳解 ##鴻蒙開發(fā)能力 ##HarmonyOS
    的頭像 發(fā)表于 07-07 11:48 ?133次閱讀
    <b class='flag-5'>鴻蒙</b>應(yīng)用px,vp,fp概念<b class='flag-5'>詳解</b>
    主站蜘蛛池模板: 亚洲国产成人久久99精品 | 人人做天天爱夜夜爽中字 | 午夜嘿嘿 | 国产精品四虎在线观看免费 | 日韩一级黄色录像 | 狠狠去 | 中日韩欧美在线观看 | 老师下面很湿很爽很紧 | 影音先锋色天使 | 护士一级aaaaaa毛片 | 久久久久久久国产免费看 | 小屁孩cao大人免费网站 | 久久久精品免费 | 加勒比一本一道在线 | 56pao强力打造| 三级毛片在线免费观看 | 四虎影视永久在线 yin56xyz | 青青热久免费精品视频在线观看 | 久久男女| 2018国产精品 | 色色色爱 | 黄色网页在线观看 | 亚洲图片欧美色图 | 四月激情网| 天天澡天天干 | 又黄又爽的成人免费网站 | 天堂视频在线视频观看2018 | 狼狼狼色精品视频在线播放 | 天天操天天插 | 亚洲bt天堂| 靓装爱神12丝袜在线播放 | 精品黄色录像 | 日本国产高清色www视频在线 | 黄色xxxx| 欧美色综合久久 | 日日日天天射天天干视频 | 日产精品卡二卡三卡四卡无卡乱码 | 在线天堂中文在线资源网 | 五月天婷婷在线视频国产在线 | 国产精品久久精品牛牛影视 | 亚洲a级毛片 |