【HarmonyOS】鴻蒙開發之Stage模型-UIAbility的啟動模式——第4.4章

UIAbi lity的啟動模式簡介

一共有四種:singleton,standard,specified,multion。在項目目錄的:src/main/module.json5。默認開啟模式為singleton(單例模式)。如下圖
在這里插入圖片描述

singleton(單實例模式)啟動模式

每個UIAbility只存在唯一實例。任務列表中只會存在一個相同的UIAbility (會覆蓋上一個實例)

代碼實例:

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

standard(標準實例模式)啟動模式

每次啟動UIAbility都會創建一個新的實例。在任務列表中可能存在一個或多個相同的UIAbility實例。新實例創建后,舊實例依然存在。
好處:實現多開效果

代碼實例:

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

multion (多實例模式) 啟動模式

每次啟動UIAbility都會創建一個新的實例。新實例創建后,舊實例會被移除。
場景: 用戶在使用分屏功能時,希望使用兩個不同應用(例如備忘錄應用和圖庫應用)之間進行分屏,也希望能使用同一個應用(例如備忘錄應用自身)進行分屏。

代碼實例:

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

specified(指定實例模式)啟動模式

每個UIAbility實例可以設置Key指示。啟動UIAbility時,需要制定key,存在key相同實例直接被拉起,不存在則創建新實例

場景: 用戶打開文檔應用,從文檔應用中打開一個文檔內容,回到文檔應用,繼續打開同一個文檔,希望打開的還是同一個文檔內容;以及在文檔應用中新建一個新的文檔,每次新建文檔,希望打開的都是一個新的空白文檔內容。

  1. 第一步:創建新的ability,修改module.json5配置文件
    1.1 在ets文件加載創建新的ability,名字為testAbility
    在這里插入圖片描述
    ets多出testAbility文件夾和文件(后續需用用到testAbility文件進行修改)
    在這里插入圖片描述

    1.2 創建為后,module.json5文件的module->abilities會多出一個testAbility對象。并修改module.json5配置文件
    在這里插入圖片描述

{"module": {..."abilities": [...,{"name": "testAbility","srcEntry": "./ets/testability/testAbility.ts","description": "$string:testAbility_desc","icon": "$media:icon","label": "$string:testAbility_label","startWindowIcon": "$media:icon","startWindowBackground": "$color:start_window_background","launchType": "specified",}]}
}
  1. 第二步:specified啟動模式實例代碼
    2.1 當前UIAbility調用startAbility方法拉起目標UIAbility
    實例代碼:
@Entry
@Component
export struct UiAbilityStartMode{//1.1 獲取上下文private context = getContext(this) as common.UIAbilityContext;handleStartAbilityTest(id:number) {//1.2 指定要跳轉到的UIAbility的信息let want:Want = {deviceId: '', // deviceId為空表示本設備bundleName: 'com.example.myapplication',abilityName: 'testAbility',//ability的名稱  去項目module.json5文件里的module.abilities.namemoduleName: 'entry', // 模塊名 去項目module.json5文件里的module.nameparameters: { //參數instanceKey: "id_"+id,//UIAbility實例的key},}//1.3 嘗試拉起目標UIAbility實例this.context.startAbility(want);}@State num:number[]=[1,2]@State curNum:number=1build(){Column(){TitleBar({titleBarAttribute:{title:"UIAbility啟動模式",backShow:true,backCallback:()=>{router.back()}},}){}Column(){Column(){Text("specified啟動模式").fontSize(26).margin({bottom:10})Button("添加文件").onClick(()=>{let numData = this.curNum++this.num.push(numData)this.handleStartAbilityTest(numData)})Column(){ForEach(this.num,(item,index) => {Row(){Row(){Image($r("app.media.csdn")).width(26).margin({right:10})Text("文檔-"+item).fontColor(Color.White)}Text("查看文檔").fontColor(Color.White)}.borderRadius(10).margin({bottom:10}).padding(10).backgroundColor("#409eff").width("90%").justifyContent(FlexAlign.SpaceBetween).onClick(()=>{this.handleStartAbilityTest(item)})})}.margin({top:20})}}.justifyContent(FlexAlign.Center).height("100%")}}
}

運行結果:
在這里插入圖片描述
文檔頁面頁面代碼如下:

//文檔頁面
@Entry
@Component
export struct DocPage{//1.1 獲取上下文private context = getContext(this) as common.UIAbilityContext;handleStartAbilityTest() {//1.2 指定要跳轉到的UIAbility的信息let want:Want = {deviceId: '', // deviceId為空表示本設備bundleName: 'com.example.myapplication',abilityName: 'EntryAbility',//ability的名稱  去項目module.json5文件里的module.abilities.namemoduleName: 'entry', // 模塊名 去項目module.json5文件里的module.name}//1.3 嘗試拉起目標UIAbility實例this.context.startAbility(want);}build(){Column(){Text("你成功了")Button("返回").onClick(()=>{this.handleStartAbilityTest()})}.justifyContent(FlexAlign.Center).height("100%")}
}
  1. 第三步:為目標UIAbility實例生成唯一key
    3.1 在AbilityStage的生命周期回調中,為目標UIAbility實例生成唯一key。
    在ets下創建abilityStage文件夾和文件,獲取UIAbility實例key值
    在這里插入圖片描述
    代碼實例
import AbilityStage from '@ohos.app.ability.AbilityStage';
import Want from '@ohos.app.ability.Want';//獲取UIAbility實例對應的一個Key值
export default class MyAbilityStage extends AbilityStage {onAcceptWant(want:Want): string {// 在被調用方的AbilityStage中,針對啟動模式為specified的UIAbility返回一個UIAbility實例對應的一個Key值// 判斷當前拉取的ability名稱是否為testAbilityif (want.abilityName === 'testAbility') {// 返回的字符串Key標識為自定義拼接的字符串內容return `AbilityInstanceKey_${want.parameters.instanceKey}`;}return '';}
}

還需要在module.json5配置文件編輯srcEntry文件路勁(填寫你自己的abilityStage.ets文件路徑),才能獲取key值。
在這里插入圖片描述
4. 第四步:修改testability.ts的加載路徑為文檔頁面
在這里插入圖片描述

最后重啟,點擊文檔,就能創建不同key的UIAbility實例

? 踩坑不易,還希望各位大佬支持一下 \textcolor{gray}{踩坑不易,還希望各位大佬支持一下} 踩坑不易,還希望各位大佬支持一下

📃 個人主頁: \textcolor{green}{個人主頁:} 個人主頁: 沉默小管

📃 個人網站: \textcolor{green}{個人網站:} 個人網站: 沉默小管

📃 個人導航網站: \textcolor{green}{個人導航網站:} 個人導航網站: 沉默小管導航網

📃 我的開源項目: \textcolor{green}{我的開源項目:} 我的開源項目: vueCms.cn

🔥 技術交流 Q Q 群: 837051545 \textcolor{green}{技術交流QQ群:837051545} 技術交流QQ群:837051545

👍 點贊,你的認可是我創作的動力! \textcolor{green}{點贊,你的認可是我創作的動力!} 點贊,你的認可是我創作的動力!

?? 收藏,你的青睞是我努力的方向! \textcolor{green}{收藏,你的青睞是我努力的方向!} 收藏,你的青睞是我努力的方向!

?? 評論,你的意見是我進步的財富! \textcolor{green}{評論,你的意見是我進步的財富!} 評論,你的意見是我進步的財富!

如果有不懂可以留言,我看到了應該會回復
如有錯誤,請多多指教

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

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

相關文章

測試管理進階 | 量力而行:避免成為替罪羊

職場中,我們常常面臨是否幫助他人的抉擇。盡管善良是美德,但過度的好人卡可能會給自己帶來麻煩。本文將探討如何在職場中量力而行,避免成為替罪羊,以及如何保持高效和合理的職責劃分。 我們在工作中常常會遇到一些需要幫助他人的情況,作為團隊的一員,我們希望能夠積極地協…

Linux運維_Bash腳本_編譯安裝libGD-2.3.3

Linux運維_Bash腳本_編譯安裝libGD-2.3.3 Bash (Bourne Again Shell) 是一個解釋器,負責處理 Unix 系統命令行上的命令。它是由 Brian Fox 編寫的免費軟件,并于 1989 年發布的免費軟件,作為 Sh (Bourne Shell) 的替代品。 您可以在 Linux 和…

六、繼承(一)

1 繼承的引入 以往我們想分別實現描述學生、老師的類,可能會這樣子做: class Student {string _name;string _number;int _tel;int id;string _address;int _age; }; class Teacher {string _name;int _level;int _tel;int id;string _address;int _ag…

【歸并排序】 詳細解析 動圖演示 逐圖解析 洛谷P1177【模板】排序 sort【快速排序】

文章目錄 歸并排序1.歸并排序的復雜度分析2.細節解釋3.歸并排序動圖演示3(1) 我們的拆分過程如下↓ 4.code↓ 洛谷P1177【模板】排序數據規模與約定code(歸并排序)↓code(sort排序【快速排序】) 完結撒花( ̄▽&#xff…

閱讀筆記 | REFORMER: THE EFFICIENT TRANSFORMER

閱讀論文: Kitaev, Nikita, ?ukasz Kaiser, and Anselm Levskaya. “Reformer: The efficient transformer.” arXiv preprint arXiv:2001.04451 (2020). 背景與動機 這篇論文發表較早,主要關注Transformer的效率問題。標準的Transformer模型在許多自然…

數據中臺:數字中國戰略關鍵技術實施

這里寫目錄標題 前言為何要建設數據中臺數據中臺建設痛點數據中臺學習資料聚焦前沿,方法論體系更新與時俱進,緊跟時代熱點深入6大行業,提煉實踐精華大咖推薦,數字化轉型必備案頭書 前言 在數字中國這一國家戰略的牽引下&#xff0…

測試基礎|質量保障體系從1到N的思考

在2023年,重點構建了團隊的質量保障體系,基本完成了從0到1的過程積累,也在多個不同的場合做了相關的分享,收獲了很多同行給的建議和意見。今年的首個工作目標是把這套質量保障體系運營好,去覆蓋更多的團隊,完成從1到N的過程,讓更多的團隊從這個質量體系中獲益,保障基本…

Node插件開發(1)-快速入門

在使用Electron開發客戶端時,如果現有Node模塊所提供的功能無法滿足需求,我們可以使用C開發自定義的Node模塊,也稱插件(addon)。 Node.js插件的擴展名為.node,是二進制文件,其本質上是動態鏈接…

基于springboot+vue的響應式企業員工績效考評系統(源碼+論文)

文章目錄 前言 一、功能設計 1 普通員工功能 2 主管功能 3 系統管理員功能 4 評分標準功能 5 PC端與手機端 6 制圖 二、功能實現 普通員工 1普通員工登錄 2公告板塊 3日志板塊 主管 1主管登錄 2公告板塊 3日志板塊 4績效評分板塊 5個人信息板塊 系統管理員…

TypeScript 日期格式化工具方法

工具方法 創建工具文件:util.ts /*** 獲取時間并格式化函數* param M 格式模板 如: YYYY-MM-DD ...* param Time 可選傳入時間參數 默認為 Now*/ export const getFormatDate (M: string, Time: Date | null | string | number null) > {let date: Date Tim…

在 Linux 環境下安裝 Kibana

目錄 一、Kibana 是什么 二、在 Linux 環境下安裝 Kibana 1、下載安裝包 2、解壓 3、修改 Kibana的配置文件 config/kibana.yml 4、啟動 5、瀏覽器登錄 Kibana 6、測試查詢 一、Kibana 是什么 Kibana 是通向 Elastic 產品集的窗口。 它可以在 Elasticsearch 中對數據進…

品牌推廣的兩種飛輪:非酋飛輪與歐皇飛輪

在品牌推廣的世界里,存在著兩種截然不同的飛輪效應,我們稱之為“非酋飛輪”與“歐皇飛輪”。這兩種飛輪象征著品牌發展的兩種不同路徑和策略,而迅騰文化則以其獨特的“繁”的原則,巧妙地將這兩種飛輪結合,助力品牌形成…

Linux安裝JumpServer并結合內網穿透實現公網訪問本地服務

💝💝💝歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kwan 的首頁,持續學…

Kubernetes 學習總結(46)—— Pod 不停重啟問題分析與解決

我們在做性能測試的時候,往往會發現我們的pod服務,頻繁重啟,通過kubectl get pods 命令,我們來逐步定位問題。 現象:running的pod,短時間內重啟次數太多。 定位問題方法:查看pod日志 kubectl get event …

【Element】實現基于 Element UI el-tabs 的左右滑動動畫

實現基于 Element UI el-tabs 的左右滑動動畫 引言 在構建現代 web 應用時,為用戶提供平滑的動畫效果是提升用戶體驗的關鍵。本篇博客將詳細介紹如何在使用 Vue 以及 Element UI 時,實現一個具有左右滑動效果的 tab 切換動畫。 使用 el-tabs 創建 tab…

Flutter 中的 SliverGrid 和 GridView:區別與使用場景

在 Flutter 中,SliverGrid 和 GridView 都是用于展示網格布局的組件,但它們有著不同的特點和適用場景。本文將介紹它們之間的區別以及在實際開發中的使用場景。 SliverGrid 和 GridView 的區別 SliverGrid: SliverGrid 是 CustomScrollView …

第十五屆藍橋杯第三期模擬賽題單

目錄 第一題: 第二題: 第三題: 第四題: 第五題: 第六題: 第七題 第八題 第九題 第十題 第一題 【問題描述】 請問 2023 有多少個約數?即有多少個正整數,使得 2023 是這個正整數的整數倍…

FolkMQ 是怎樣進行消息的事務處理?

FolkMQ 提供了二段式提交的事務提交的機制(TCC 模型)。允許生產者在發送消息時綁定到一個事務中并接收事務的管理,以確保消息的原子性(要么全成功,要么全失敗)。在 FolkMQ 中,事務是通過 MqTran…

1、EmlogCms代碼審計

一、SQL注入 1、后臺標簽刪除處存在1處sql注入 漏洞條件 ● 漏洞url: http://emlog6.0.com/admin/tag.php?actiondell_all_tag ● 漏洞參數:tag[xx] ● 是否存在限制:無 ● 是否還有其他條件:actiondell_all_tag,token復現 POST /admin…

擼chatgpt3.5 api backend-api 對接wxbot

功能是實現 web 轉api 對接wxbot用, 直接上代碼, 1.獲取wss url def get_register_websocket():# 請求頭url "https://chat.openai.com/backend-api/register-websocket"payload {}headers {Authorization: Bearer eyJhbGxxxxxxxxxxxxx…