华为鸿蒙开发-鸿蒙基于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

相关文章

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

利用Python开发Markdown表格结构转换为Excel工具

《利用Python开发Markdown表格结构转换为Excel工具》在数据管理和文档编写过程中,我们经常使用Markdown来记录表格数据,但它没有Excel使用方便,所以本文将使用Python编写一... 目录1.完整代码2. 项目概述3. 代码解析3.1 依赖库3.2 GUI 设计3.3 解析 Mark

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

基于Python开发批量提取Excel图片的小工具

《基于Python开发批量提取Excel图片的小工具》这篇文章主要为大家详细介绍了如何使用Python中的openpyxl库开发一个小工具,可以实现批量提取Excel图片,有需要的小伙伴可以参考一下... 目前有一个需求,就是批量读取当前目录下所有文件夹里的Excel文件,去获取出Excel文件中的图片,并