鴻蒙 從打開一個新窗口到Stage模型的UIAbility組件

打開一個新的窗口

請添加圖片描述

我們首先來實現如何在一個應用中打開一個新窗口,使用的模型是 Stage 模型

  1. 在項目文件里,新建一個 newWindow.ets 新文件
    src/main/ets/pages/newWindow.ets

newWindow.ets文件里面隨便寫點什么都行,這里是第一步創建的文件

新建的文件可以在 src/main/resources/base/profile/main_pages.json 查看

  1. 新建一個 Ability

src/main/ets 文件=>鼠標右鍵=>新建=>Ability=>寫好新的Ability名字比如這里我寫newWindow

  1. ets 文件夾下會出現一個新的 newWindow 文件夾,里面有個新的 newWindow.ets 文件,打開它并修改下面的生命周期函數確保啟動文件為第一步新建的文件newWindow.ets
onWindowStageCreate(windowStage: window.WindowStage): void {windowStage.loadContent('pages/newWindow')}
  1. 回到入口文件src/main/ets/pages/Index.ets,加入一個可以跳到新窗口的按鈕
import { common } from '@kit.AbilityKit'@Entry
@Component
struct Index {build() {Button('在新窗口打開').onClick(_ => {//getContext() 得到UIAbilityContext對象//得到頁面所在UIAbility對應的UIAbilityContext// 強行逆轉父類 aslet ctx = getContext() as common.UIAbilityContext//啟動一個新的UIAbilityctx.startAbility({bundleName: 'com.example.myapplication', //必需!要啟動哪個應用下的UIAbilityabilityName: 'newWindow', //必需!要啟動的UIAbility名(參考moduels.json5中的名字)// moduleName: 'entry', //可選的!如果目標Ability在同一個模塊下,此屬性可以省略})})}
}
// AppScope/app.json5 查看 bundleName

這樣就可以打開一個新的窗口了

使用 Want

顯式 Want

// 我這里又新建了一個項目,所以有些名字和上面的例子不同
import { common ,Want } from '@kit.AbilityKit'@Entry
@Component
struct Index {build() {Button('在新窗口打開').onClick(_ => {let ctx = getContext() as common.UIAbilityContextlet wantInfo: Want = {bundleName: 'com.example.quanguokefei',abilityName: 'Page1',moduleName: 'entry',}//啟動一個新的UIAbilityctx.startAbility(wantInfo)})}
}

隱式 Want

  1. 跳到自定義窗口
    隱式 Want 使用 skills 標簽來定義需要使用的能力
  • 先去目錄 src/main/module.json5修改需要跳轉的窗口
  • 比如我要跳轉的窗口是 Page1,加入 actions: ["iampage1"],名字自由取,可以多個
{name: "Page1",srcEntry: "./ets/page1/Page1.ets",description: "$string:Page1_desc",icon: "$media:layered_image",label: "$string:Page1_label",startWindowIcon: "$media:startIcon",startWindowBackground: "$color:start_window_background",skills: [{actions: ["iampage1", "other_name"],},],
}

處理 Want

import { common ,Want } from '@kit.AbilityKit'@Entry
@Component
struct Index {build() {Button('在新窗口打開').onClick(_ => {let ctx = getContext() as common.UIAbilityContext// 在這里只需要action就行let wantInfo: Want = {action:'iampage1'}ctx.startAbility(wantInfo)})}
}

窗口啟動模式

singleton 啟動模式為單實例模式,也是默認情況下的啟動模式
multiton 啟動模式為多實例模式
specified 啟動模式為指定實例模式,針對一些特殊場景使用(例如文檔應用中每次新建文檔希望都能新建一個文檔實例,重復打開一個已保存的文檔希望打開的都是同一個文檔實例)

src/main/module.json5 文件中修改

{"module": {"abilities": [{"name": "Page1Ability","launchType": "singleton | multiton | specified"}]}
}

UIAbility 生命周期

在這里插入圖片描述

執行順序:
首次啟動 onCreate → onWindowStageCreate → onForeground
切換到后臺 onBackground
從后臺重新打開 onForeground
正常退出應用 onBackground → onWindowStageDestroy → onDestroy

窗口已經存在的情況下,從主程序進入,不是窗口視圖 onNewWant → onForeground

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

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

相關文章

Linux的日志管理

日志管理服務rsyslogd 配置文件 | 日志類型 | 說明 | | -------------------- | ----------------------------------- | | auth | pam產生的日志 | | authpriv | ssh、ftp等…

【PhysUnits】4.1 類型級比特位實現解釋(boolean.rs)

一、源碼 該代碼實現了一個類型級(type-level)的布爾系統,允許在編譯時進行布爾運算。 //! 類型級比特位實現 //! //! 這些是基礎的比特位類型,作為本庫中其他數值類型的構建基礎 //! //! 已實現的**類型運算符**: //! //! - 來自 core::op…

【docker】--數據卷掛載

文章目錄 存儲卷管理創建存儲卷查看存儲卷詳細信息查看存儲卷刪除存儲卷 存儲卷管理 # 目錄掛載 docker run -v 本機目錄:容器目錄#1) # 將容器內部的 “/usr/share/nginx/html” 進行持久化掛載 會在宿主機生成一個隨機的存儲卷 docker run -v /usr/sh…

雙重差分模型學習筆記2(理論)

【DID最全總結】90分鐘帶你速通雙重差分!_嗶哩嗶哩_bilibili 目錄 一、staggered DID 交錯雙重差分 二、動態雙重差分 動態雙重差分法公式解釋 符號解釋 公式邏輯與案例 與標準DID的區別 總結 “雙減” 政策動態差分模型 (一)設定處…

預測模型開發與評估:基于機器學習的數據分析實踐

在當今數據驅動的時代,預測模型已成為各行各業決策制定的核心工具。本文將分享我在COMP5310課程項目中開發預測模型的經驗,探討從數據清洗到模型優化的完整過程,并提供詳細的技術實現代碼。 ## 研究問題與數據集 ### 研究問題 我們的研究聚焦…

Java 并發編程歸納總結(可重入鎖 | JMM | synchronized 實現原理)

1、鎖的可重入 一個不可重入的鎖,搶占該鎖的方法遞歸調用自己,或者兩個持有該鎖的方法之間發生調用,都會發生死鎖。以之前實現的顯式獨占鎖為例,在遞歸調用時會發生死鎖: public class MyLock implements Lock {/* 僅…

數據治理域——數據同步設計

摘要 本文主要介紹了數據同步的多種方式,包括直連同步、數據文件同步和數據庫日志解析同步。每種方式都有其適用場景、技術特點、優缺點以及適用的數據類型和實時性要求。文章還詳細探討了數據直連同步的特點、工作原理、優點、缺點、適用場景等,并對數…

AI人工智能在教育領域的應用

AI人工智能在教育領域的應用 隨著科技的飛速發展,人工智能(AI)逐漸成為推動教育變革的重要力量。AI在教育領域的應用不僅改變了傳統的教學模式,還為個性化學習、教育資源優化和教育管理帶來了前所未有的機遇。本文將從多個方面探…

ohttps開啟群暉ssl證書自動更新

開啟群暉ssl證書自動更新OHTTPS ohttps是一個免費自動簽發ssl證書、管理、部署的項目。 https://ohttps.com 本文舉例以ohttps項目自動部署、更新群暉的ssl證書。 部署 簽發證書 打開ohttps-證書管理-創建證書-按你實際情況創建證書。創建部署節點 打開Ohttps-部署節點-添加…

ElasticSearch聚合操作案例

1、根據color分組統計銷售數量 只執行聚合分組,不做復雜的聚合統計。在ES中最基礎的聚合為terms,相當于 SQL中的count。 在ES中默認為分組數據做排序,使用的是doc_count數據執行降序排列。可以使用 _key元數據,根據分組后的字段數…

SQLite 數據庫常見問題及解決方法

一、數據庫文件鎖定問題 1. 問題表現 在多線程或多進程環境下訪問 SQLite 數據庫時,常常會出現數據庫文件被鎖定的情況。當一個進程對數據庫執行寫操作時,其他進程的讀寫操作都會被阻塞,導致應用程序出現卡頓甚至無響應。比如在移動應用開發…

DeepSeek基礎:PPO、DPO、GRPO概念詳解

DeepSeek-R1 的強化學習方案中,其亮點之一在于通過 GRPO 算法取代RLHF 常用的 PPO,通過盡可能減少人類標注數據,設計純 RL 的環境,用精心設計的獎勵機制來訓練模型自己學會推理。那么什么是PPO、GRPO,其產生的背景、核…

一分鐘了解機器學習

一分鐘了解機器學習 A Minute to Know About Machine Learning By JacksonML 1. 什么是機器學習? 機器學習(Machine Learning,ML) 是人工智能的分支,通過從數據中自動學習規律,使計算機無需顯式編程即可完成任務。…

mvc-service引入

什么是業務層 1)Model1(JSP)和Model2(模糊的mvc): MVC:Model(模型),View(視圖),Controller(控制器) 視圖層:用于數據展示以及用戶交互的界…

第一次做逆向

題目來源:ctf.show 1、下載附件,發現一個exe和一個txt文件 看看病毒加沒加殼,發現沒加那就直接放IDA 放到IDA找到main主函數,按F5反編譯工具就把他還原成類似C語言的代碼 然后我們看邏輯,將flag.txt文件的內容進行加…

docker(四)使用篇二:docker 鏡像

在上一章中,我們介紹了 docker 鏡像倉庫,本文就來介紹 docker 鏡像。 一、什么是鏡像 docker 鏡像本質上是一個 read-only 只讀文件, 這個文件包含了文件系統、源碼、庫文件、依賴、工具等一些運行 application 所必須的文件。 我們可以把…

k8s 1.10.26 一次containerd失敗引發kubectl不可用問題

k8s 1.10.26 一次containerd失敗引發kubectl不可用問題 開機k8s 1.10.26時,報以下錯誤 [rootmaster ~]# kubectl get no E0515 08:03:00.914894 7993 memcache.go:265] couldnt get current server API group list: Get "https://192.168.80.50:6443/api?…

今日積累:若依框架配置QQ郵箱,來發郵件,注冊賬號使用

QQ郵箱SMTP服務器設置 首先,我們需要了解QQ郵箱的SMTP服務器地址。對于QQ郵箱,SMTP服務器地址通常是smtp.qq.com。這個地址適用于所有使用QQ郵箱發送郵件的客戶端。 QQ郵箱SMTP端口設置 QQ郵箱提供了兩種加密方式:SSL和STARTTLS。根據您選…

無縫部署您的應用程序:將 Jenkins Pipelines 與 ArgoCD 集成

在 DevOps 領域,自動化是主要目標之一。這包括自動化軟件部署方式。與其依賴某人在部署軟件的機器上進行 rsync/FTP/編寫軟件,不如使用 CI/CD 的概念。 CI,即持續集成,是通過代碼提交創建工件的步驟。這可以是 Docker 鏡像&#…

4.2.3 Thymeleaf標準表達式 - 5. 片段表達式

在本次實戰中,我們通過 Thymeleaf 的片段表達式實現了模板的模塊化和復用。首先,我們定義了一個導航欄片段 navbar,并通過參數 activeTab 動態高亮當前激活的標簽。然后,我們在多個頁面(如主頁、關于頁和聯系頁&#x…