华为鸿蒙开发-鸿蒙基于ARKTS开发之启动模式

2024-06-06 19:20

本文主要是介绍华为鸿蒙开发-鸿蒙基于ARKTS开发之启动模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

鸿蒙生态取得爆发式增长!
截至3月底,已有超4000个应用加入鸿蒙生态。

而在今年1月中旬,华为刚宣布HarmonyOS NEXT鸿蒙星河版面向开发者开放申请,这一版本鸿蒙系统也被称为“纯血鸿蒙”。

当时,华为宣布首批200多家应用厂商正在加速开发鸿蒙原生应用,不到3个月时间,加入鸿蒙生态的原生应用数量便增长近20倍。

与此同时,华为将于4月11日举办鸿蒙春季沟通会,或将在会上公布相关新产品。

预计今年四季度,HarmonyOS NEXT鸿蒙星河版将面向消费者发布商用版本。

随着鸿蒙系统的爆发,接下来相应的岗位肯定也会越来越火爆,今天就来跟大家聊一下鸿蒙基于ARKTS开发之启动模式

鸿蒙的启动模式分为2种

●页面路由router配置
●module.json5的abilitys的lanuchType

页面路由router配置

路由跳转分为pushUrl和replaceUrl

●pushUrl 跳转页面
●replaceUrl。跳转页面且替换当前页面

  //由于page_view_single在跳转的时候Single模式,所以还会显示之前的页面Button("点击进入Single模式").margin({top:20}).width('80%').height(50).stateStyles({pressed:{.backgroundColor(Color.Orange)}}).fontSize(20).onClick(()=>{router.pushUrl({url: Contact.SINGLE_MODE_PAGE,},router.RouterMode.Single).catch((error: Error) => {console.info('TAG', 'IndexPage push error' + JSON.stringify(error));});})//由于使用了replaceUrl在跳转的时候不会创建新的实例而是替换当前页在栈中Button("点击进入替换当前页面").margin({top:20}).width('80%').height(50).fontSize(20).onClick(()=>{this.message="Standard模式被点击过"router.replaceUrl({url: Contact.REPLACE_PAGE,},router.RouterMode.Single).catch((error: Error) => {console.info('TAG', 'IndexPage push error' + JSON.stringify(error));});})

通过路由跳转的时候配置 RouterMode

 Button("点击进入SINGLE模式页面").margin({ top: 20 }).width('80%').height(50).fontSize(20).onClick(() => {router.pushUrl({url: Contact.SINGLE_MODE_PAGE,}, router.RouterMode.Single).catch((error: Error) => {console.info('TAG', 'IndexPage push error' + JSON.stringify(error));});})

RouterMode有2种模式 (默认standard)

●Single模式 (如果栈里有不会创建新实例,重复打开之前的并推到栈顶)
●Standard模式(每次跳转都是开启一个新的实例(页面))

WX20240210-104527@2x.png

当我点击按钮 改变文字“single模式”变为“single模式被点击过”

WX20240210-133012@2x.png

WX20240210-140748@2x.png

WX20240210-141030@2x.png

WX20240210-140748@2x.png

点击进入standerd模式进入新的页面再从stanard模式页面再次进入之前的single模式页面后页面是
WX20240210-133035@2x.png

可以理解为 Standard启动一个就是一个,Single模式如果打开过这个模式的页面再点击进去该页面还是之前的

Ability跳转启动模式

如果你是有多个Ability

WX20240210-145026@2x.png

在module.json5文件下
配置 "launchType"有4中模式 默认singletion

-singleton 当前栈里有这个模式的ability不会创建新的而是再次调起之前的,并推到栈顶
-multiton 文档上说是多实例(我测了下还是singleton模式)
-standard 每次点击都会创建新的实例对象
-specified 当栈中已有相同key的ability不会创建新的实例 否则创建新的

WX20240210-145405@2x.png

"abilities": [{"name": "EntryAbility","srcEntry": "./ets/entryability/EntryAbility.ts","description": "$string:EntryAbility_desc","icon": "$media:icon","label": "$string:EntryAbility_label","startWindowIcon": "$media:icon","startWindowBackground": "$color:start_window_background","removeMissionAfterTerminate": true,"exported": true,"skills": [{"entities": ["entity.system.home"],"actions": ["action.system.home"]}]},{"name": "SingletonAbility","srcEntry": "./ets/singletonability/SingletonAbility.ts","description": "$string:SingleAbility1_desc","icon": "$media:icon","label": "$string:SingleAbility1_label","removeMissionAfterTerminate": true,"launchType": "singleton","startWindowIcon": "$media:icon","startWindowBackground": "$color:start_window_background","skills": [{"entities": ["entity.system.home"],"actions": ["action.system.home"]}]},{"name": "StandardAbility","srcEntry": "./ets/standardability1/StandardAbility.ts","description": "$string:StandardAbility1_desc","icon": "$media:icon","label": "$string:StandardAbility1_label","removeMissionAfterTerminate": true,"launchType": "standard","startWindowIcon": "$media:icon","startWindowBackground": "$color:start_window_background","skills": [{"entities": ["entity.system.home"],"actions": ["action.system.home"]}]},{"name": "SpecifiedAbility","srcEntry": "./ets/specifiedability/SpecifiedAbility.ts","description": "$string:SpecifiedAbility_desc","icon": "$media:icon","label": "$string:SpecifiedAbility_label","startWindowIcon": "$media:icon","startWindowBackground": "$color:start_window_background","launchType": "specified","skills": [{"entities": ["entity.system.home"],"actions": ["action.system.home"]}]},{"name": "MultitonAbility","srcEntry": "./ets/multitonability/MultitonAbility.ts","description": "$string:MultitonAbility_desc","icon": "$media:icon","launchType": "multiton",//不起作用 还是singleton模式"label": "$string:MultitonAbility_label","startWindowIcon": "$media:icon","startWindowBackground": "$color:start_window_background"}
]

启动一个ability代码

在你的page页面结构体里添加如下,在触发地方调用
@Entry
@Component
struct Index {
private context = getContext(this) as common.UIAbilityContext

//Standard 每次都会创建新的实例startStandardAbility() {console.info(TAG, `StandardAbility`);let want = {deviceId: '', // deviceId为空表示本设备bundleName: 'com.demo.myapplication',abilityName: 'StandardAbility',}try {this.context.startAbility(want).then(() => {console.info(TAG, `startAbility Success`);}).catch((err) => {console.info(TAG, `Failed: ${JSON.stringify(err)}}`);})} catch (error) {console.log("startAbility error: " + error)}}

启动一个specified模式的ability代码与之前不同 需要配置parameters

里面的参数可自行定义
//Specified 创建实例后如果有相同的key不会创建新实例

  startSpecifiedAbility() {console.info(TAG, `SpecifiedAbility`);let want: Want = {deviceId: '', // deviceId为空表示本设备bundleName: 'com.demo.myapplication',abilityName: 'SpecifiedAbility',parameters: {key: "value", // 自定义信息  key和value自定义即可},}try {this.context.startAbility(want).then(() => {console.info(TAG, `startAbility Success`);}).catch((err) => {console.info(TAG, `Failed: ${JSON.stringify(err)}}`);})} catch (error) {console.log("startAbility error: " + error)}}

如果是Specified需要定义AbilityStage 如果是相同key他会走onacceptWant,只限Specified模式

export default class MyAbilityStag extends AbilityStage {onAcceptWant(want:Want): string {// 在被调用方的AbilityStage中,针对启动模式为specified的UIAbility返回一个UIAbility实例对应的一个Key值if (want.abilityName === 'SpecifiedAbility') {// 返回的字符串Key标识为自定义拼接的字符串内容if (want.parameters["key"]=="value") {return   `SpecifiedAbilityInstance_${want.parameters.key}`;}}return 'MyAbilityStag';}
}

需要在module.json5下配置srcEntry

WX20240210-150915@2x.png

如果需要在桌面显示ability的图标和label需要在ability下配置skill

WX20240210-151110@2x.png

WX20240210-151213@2x.png

WX20240210-151342@2x.png

WX20240210-151423@2x.png

WX20240210-151512@2x.png

WX20240210-151543@2x.png

WX20240210-151700@2x.png

demo地址

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。随着鸿蒙的不断发展以及国家的大力支持,未来鸿蒙职位肯定会迎来一个大的爆发,只有积极应对变化,不断学习和提升自己,我们才能在这个变革的时代中立于不败之地。在这里插入图片描述

这篇关于华为鸿蒙开发-鸿蒙基于ARKTS开发之启动模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1037006

相关文章

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

售价599元起! 华为路由器X1/Pro发布 配置与区别一览

《售价599元起!华为路由器X1/Pro发布配置与区别一览》华为路由器X1/Pro发布,有朋友留言问华为路由X1和X1Pro怎么选择,关于这个问题,本期图文将对这二款路由器做了期参数对比,大家看... 华为路由 X1 系列已经正式发布并开启预售,将在 4 月 25 日 10:08 正式开售,两款产品分别为华

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Redis在windows环境下如何启动

《Redis在windows环境下如何启动》:本文主要介绍Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Redis在Windows环境下启动1.在redis的安装目录下2.输入·redis-server.exe

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S

鸿蒙中@State的原理使用详解(HarmonyOS 5)

《鸿蒙中@State的原理使用详解(HarmonyOS5)》@State是HarmonyOSArkTS框架中用于管理组件状态的核心装饰器,其核心作用是实现数据驱动UI的响应式编程模式,本文给大家介绍... 目录一、@State在鸿蒙中是做什么的?二、@Spythontate的基本原理1. 依赖关系的收集2.

Python通过模块化开发优化代码的技巧分享

《Python通过模块化开发优化代码的技巧分享》模块化开发就是把代码拆成一个个“零件”,该封装封装,该拆分拆分,下面小编就来和大家简单聊聊python如何用模块化开发进行代码优化吧... 目录什么是模块化开发如何拆分代码改进版:拆分成模块让模块更强大:使用 __init__.py你一定会遇到的问题模www.