【HarmonyOS】Stage 模型 - UIAbility 的啟動模式

Stage 模型這樣的應用,它在啟動的時候會先準備 Ability Stage 舞臺,接著呢,就可以基于它去創建 UIAbility 的實例,并去啟動它。

UIAbility 組件啟動模式 有四種:

  • singleton
  • standard
  • multiton
  • specified

修改模塊的 module.json5 來改變啟動模式:

{"module": {..."abilities": [{..."launchType": "singleton",...}]}
}

一、singleton 啟動模式

👉 官方文檔

singleton 是單實例的意思,所以這種模式對應的 UIAbility 不管你給它啟動多少次,它只會存在唯一的實例。事實上,我們的應用默認 Ability 都是這種模式。

UIAbility 的實例其實對應到操作系統任務列表中的一個任務。所以,如果你的 Ability 是 singleton 這種模式,不管啟動多少次,去查看手機的任務列表,會發現這個 Ability 在任務列表中只會存在一個任務。


運行日志:

  1. 點擊圖標啟動 app:

    Ability onCreate
    Ability onWindowStageCreate
    Ability onForeground
    
  2. 點擊 Home 回到桌面:

    Ability onBackground
    
  3. 再次點擊圖標啟動 app:

    Ability onForeground
    

二、standard、multiton 啟動模式

👉 官方文檔

在官網上管 standard 模式叫 multiton 模式,但是經過測試,這兩種模式是不一樣的。但是這兩個模式又非常接近,這兩種模式在每次啟動 UIAbility 時都會創建一個新實例。

在 standard 模式當中,創建一個新的實例,之前那個舊的實例也會存在,也就是多個實例并存;而 multiton 模式則不一樣,它在每次創建一個新實例,舊的實例則會被移除。

對于 standard 模式來講,每創建一個新的實例,都會存在,那是不是意味著同一個 Ability 它的多個實例是并存的。因此在任務列表中會發現一個 Ability 可能會存在一個或多個任務。


multiton 運行日志:

  1. 點擊圖標啟動 app:

    Ability onCreate
    Ability onWindowStageCreate
    Ability onForeground
    
  2. 點擊 Home 回到桌面:

    Ability onBackground
    
  3. 再次點擊圖標啟動 app:

    Ability onCreate
    Ability onWindowStageCreate
    Ability onForeground
    
  4. 點擊任務列表

    發現 App 只存在一個實例
    

standard 運行日志:

  1. 點擊圖標啟動 app:

    Ability onCreate
    Ability onWindowStageCreate
    Ability onForeground
    
  2. 點擊 Home 回到桌面:

    Ability onBackground
    
  3. 再次點擊圖標啟動 app:

    Ability onCreate
    Ability onWindowStageCreate
    Ability onForeground
    
  4. 點擊任務列表

    發現 App 存在兩個實例
    

三、specified 啟動模式

👉 官方文檔

specified 顧名思義就是指定的意思,在使用這種模式時,啟動一個 UIAbility 時是需要指定一個 key,這個 key 會作為 UIAbility 實例的一個唯一標識。

所以,當啟動時,會先看一下指定的這個 key 對應的 UIAbility 是否存在。如果不存在,就會創建一個新的 UIAbility 實例,然后把這個 key 作為這個實例的標識,下次再啟動 UIAbility 時,還需要指定 key,還需要判斷這個 key 對應的實例是否已經存在。如果已經存在,就可以直接把它喚醒,不用重新創建。

這種模式和 standard 模式有點像,就是一個 Ability 會存在多個實例,但是呢又不一樣,在創建實例時可以指定 key,key 不存在才需要創建,key 存在就不用重復創建了,這樣就可以快速的找到以前創建好的實例。

當前 UIAbility 調用 startAbility 方法拉起目標 UIAbility:

// 獲取上下文
context = getContext(this) as common.UIAbilityContext// 指定要跳轉到 UIAbility 的信息
let want = {deviceId: '',bundleName: 'com.tyhoo.hmos.myapplication',abilityName: 'TestAbility',moduleName: 'entry',parameters: {instanceKey: this.getInstanceKey()}
}// 嘗試拉起目標 UIAbility 實例
this.context.startAbility(want)
  • 調用一個全局的 getContext 方法,來獲取 UIAbilityContext 的上下文對象。

  • 拿到上下文之后,可以調用它的 startAbility 方法,從而來去拉起一個目標的 UIAbility,或者說把它的實例給創建好。

  • 傳入參數 want 來告訴具體拉起哪個實例。

    • deviceId:設備信息。如果什么都不傳,代表的是本設備。
    • bundleName:包名/應用名。它是設備的唯一標識。
    • abilityName:目標 UIAbility 的名稱。
    • moduleName:模塊名。調用的 Ability 在哪個模塊。
    • parameters:參數。

在 AbilityStage 的生命周期回調中為目標 UIAbility 實例生成 key:

export default class MyAbilityStage extends AbilityStage {onAcceptWant(want: Want): string {if (want.abilityName === 'TestAbility') {return `TestAbility_${want.parameters.instanceKey}`}return '';}
}

在 module.json5 配置文件中,通過 srcEntry 參數指定 AbilityStage 路徑:

{"module": {..."srcEntry": "./ets/myabilitystage/MyAbilityStage.ts"}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21294.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21294.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21294.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SSMP整合案例第五步 在前端頁面上拿到service層調數據庫里的數據后列表

在前端頁面上列表 我們首先看看前端頁面 我們已經把數據傳入前端控制臺 再看看我們的代碼是怎么寫的 我們展示 數據來自圖dataList 在這里 我們要把數據填進去 就能展示在前端頁面上 用的是前端數據雙向綁定 axios發送異步請求 函數 //鉤子函數,VUE對象初始化…

【四大組件】-- 活動 Activity

目錄 活動活動是什么活動的相關操作手動創建活動活動中使用Toast活動中使用Menu銷毀一個活動 使用Intent實現活動間啟動顯示啟動隱式啟動 活動間數據傳遞活動的生命周期返回棧活動的狀態活動的生存期 活動的啟動流程活動的回收和重建如何在活動銷毀前保存狀態 活動的啟動模式st…

設計模式(十四)行為型模式---訪問者模式(visitor)

文章目錄 訪問者模式簡介分派的分類什么是雙分派?結構UML圖具體實現UML圖代碼實現 優缺點 訪問者模式簡介 訪問者模式(visitor pattern)是封裝一些作用于某種數據結構中的元素的操作,它可以在不改變這個數據結構(實現…

紅隊內網攻防滲透:內網滲透之windows內網權限提升技術:手工篇

紅隊內網攻防滲透 1. 內網權限提升技術1.1 windows內網權限提升技術--手工篇1.1.1 Web到Win-系統提權-人工操作1.1.1.1 信息收集1.1.1.2 補丁篩選1.1.1.3 EXP獲取執行1.1.2 Web到Win-系統提權-土豆家族1.1.2.1 Test in:Windows 10/11(1809/21H2)1.1.2.2 Test in:Windows Se…

全新市場階段,Partisia BlockChain 將向 RWA、DeFi 等領域布局

Partisia Blockchain 是一個全新范式的 Layer1,該鏈通過 MPC 方案來構建鏈上隱私方案,同時該鏈通過系列獨特且創新的設計,旨在進一步解決目前 Web3 中所面臨的不可能三角問題,包括安全性、互操作性和可擴展性,為更多的…

NTFS磁盤格式讀寫工具:Tuxera NTFS 2021 for Mac

Tuxera NTFS 是一款用于 macOS 系統的 NTFS 文件系統驅動程序。NTFS 是 Windows 系統中常用的文件系統,而 macOS 默認只支持讀取 NTFS 格式的磁盤,不能進行寫入操作。因此,如果你需要在 macOS 上進行 NTFS 磁盤的寫入操作,就需要安…

提交一個Bug需要哪些信息?

軟件在使用過程中存在的任何問題都叫做軟件的缺陷,簡稱Bug,我認為要提交一個Bug首先得將這個Bug的核心內容說明一下,比如Bug的核心問題是什么、產生的前提、預期結果是什么、但實際結果是什么、以及附上一個證據圖片。 然后提交時需要Bug報告…

【一刷《劍指Offer》】面試題 28:字符串的排列

牛客對應題目鏈接:字符串的排列_牛客題霸_牛客網 (nowcoder.com) 力扣對應題目鏈接:LCR 157. 套餐內商品的排列順序 - 力扣(LeetCode) 核心考點 :全排列問題, DFS。 一、《劍指Offer》對應內容 二、分析題…

JS(DOM、事件)

DOM 概念:Document Object Model,文檔對象模型。將標記語言的各個組成部分封裝為對應的對象: Document:整個文檔對象Element:元素對象Attribute:屬性對象Text:文本對象Comment:注釋對象 JavaScript通過DOM,就能夠對HTML進行操作: 改變 HTML 元素的內…

Windows端口本地轉發

參考 微軟Netsh interface portproxy 命令 界面端口代理的 Netsh 命令 | Microsoft Learn 使用Windows系統的portproxy功能配置端口轉發 使用Windows系統的portproxy功能配置端口轉發-阿里云幫助中心 (aliyun.com) 將來自0.0.0.0地址對端口35623的訪問轉發到172.18.106.16…

SpringBoot @ModelAttribute注解的深入指南

文章目錄 前言一、基本概念二、方法級別的@ModelAttribute1. 用途2. 示例三、參數級別的@ModelAttribute1. 用途2. 示例四、處理多個@ModelAttribute1. 示例五、繼承與@ModelAttribute注解的結合使用1. 示例1.1 基類(父類)1.2 子類(具體控制器)<

多維數組找最大值

調用JavaScript的一個內置函數&#xff1a;Math.max() <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title…

虛擬機VMware Workstation 常用的快捷方式

1、 虛擬機軟件&#xff0c;如 VMware Workstation、VirtualBox 等 所使用的是 VMware Workstation 2、快捷方式 2.1 切換鼠標和鍵盤焦點 CtrlAlt&#xff1a;從虛擬機中釋放鼠標和鍵盤&#xff0c;回到主機 2.2 全屏模式 2.2.1 進入全屏模式: CtrlAltEnter 2.2.2 退出全…

政安晨:【Keras機器學習示例演繹】(五十一)—— 利用廣義網絡、深度網絡和交叉網絡進行結構化數據學習

政安晨的個人主頁&#xff1a;政安晨 歡迎 &#x1f44d;點贊?評論?收藏 收錄專欄: TensorFlow與Keras機器學習實戰 希望政安晨的博客能夠對您有所裨益&#xff0c;如有不足之處&#xff0c;歡迎在評論區提出指正&#xff01; 本文目標&#xff1a;使用 "寬深 "和 …

Python 技能提升(三)

global 和 nonlocal b 全局變量 global variabledef foo():a 局部變量 local variable# 在局部里面操作全局變量&#xff0c;需要加上聲明global bb b &#xff01;&#xff01;&#xff01;print(b)foo() # 全局變量 global variable&#xff01;&#xff01;&#xff01…

Python 遞歸函數一例

現有示例數據 # 示例數據 pending_join [ {increment: "department Finance", statement_index: 0}, {increment: "name Lisa", statement_index: 2}, {increment: "gender Female", statement_index: 3}, {increment: "hire_date <…

redis如何實現分布式鎖

Redisson是怎么實現分布式鎖的 分布式鎖&#xff1a;Redisson 提供了一種簡單而強大的方式來實現分布式鎖。 它支持多種鎖模式&#xff0c;如公平鎖、可重入鎖、讀寫鎖等&#xff0c;并且提供了鎖的超時設置和自動釋放功能。 鎖的獲取 在Redisson中常見獲取鎖的方式有 lock() …

【代碼隨想錄訓練營】【Day 37】【貪心-4】| Leetcode 840, 406, 452

【代碼隨想錄訓練營】【Day 37】【貪心-4】| Leetcode 840, 406, 452 需強化知識點 python list sort的高階用法&#xff0c;兩個key&#xff0c;另一種逆序寫法python list insert的用法 題目 860. 檸檬水找零 思路&#xff1a;注意 20 塊找零&#xff0c;可以找3張5塊升…

Mysql基礎教程(13):GROUP BY

MySQL GROUP BY 【 GROUP BY】 子句用于將結果集根據指定的字段或者表達式進行分組。 有時候&#xff0c;我們需要將結果集按照某個維度進行匯總。這在統計數據的時候經常用到&#xff0c;考慮以下的場景&#xff1a; 按班級求取平均成績。按學生匯總某個人的總分。按年或者…

“世界酒中國菜”系列活動如何助推鄉村振興和文化交流?

"世界酒中國菜"系列活動如何助推鄉村振興和文化交流&#xff1f; 《經濟參考報》&#xff08;2024年5月24日 第6版&#xff09; 新華社北京&#xff08;記者 張曉明&#xff09; “世界酒中國菜”系列活動自啟動以來&#xff0c;已在國內外產生了廣泛影響。這一國家…