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

总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/343513.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络编程TCP

White graces:个人主页 🙉专栏推荐:Java入门知识🙉 🙉 内容推荐:Java网络编程(下)🙉 🐹今日诗词: 壮士当唱大风哥, 宵小之徒能几何?🐹 ⛳️点赞 ☀️收藏⭐️关注💬卑微…

音视频开发17 FFmpeg 音频解码- 将 aac 解码成 pcm

这一节,接 音视频开发12 FFmpeg 解复用详情分析,前面我们已经对一个 MP4文件,或者 FLV文件,或者TS文件进行了 解复用,解出来的 视频是H264,音频是AAC,那么接下来就要对H264和AAC进行处理,这一节…

ChatGPT交卷2024年高考新课标I卷语文关于AI方面的作文试题

2024年新课标I卷作文试题: 阅读下面的材料,根据要求写作。(60分) 随着互联网的普及、人工智能的应用,越来越多的问题能很快得到答案。那么,我们的问题是否会越来越少? 以上材料引发了你怎样的…

Nginx03-动态资源和LNMP介绍与实验、自动索引模块、基础认证模块、状态模块

目录 写在前面Nginx03案例1 模拟视频下载网站自动索引autoindex基础认证auth_basic模块状态stub_status模块模块小结 案例2 动态网站(部署php代码)概述常见的动态网站的架构LNMP架构流程数据库Mariadb安装安全配置基本操作 PHP安装php修改配置文件 Nginx…

os和os.path模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 目录也称文件夹,用于分层保存文件。通过目录可以分门别类地存放文件。我们也可以通过目录快速找到想要的文件。在Python中,并…

写入文件内容

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在实例01中,虽然创建并打开一个文件,但是该文件中并没有任何内容,它的大小是0KB。Python的文件对象提供了write()…

人类语言处理nlp部分笔记——二、BERT和它的家族-介绍和微调

参考自李宏毅课程-人类语言处理 二、BERT和它的家族-介绍和微调 1. What is pre-train model 这里所说的pre-train model是输入一串tokens,能够输出一串vectors,且每个vector可以表示对应的语义的模型,这些vectors也被称作为embeddings。以…

google的chromedriver最新版下载地址

Chrome for Testing availability (googlechromelabs.github.io) 复制对应的地址跳转进去即可下载,下载前先看下自己google浏览器版本,找到对应的版本号去下载,把解压缩的exe放到google浏览器目录下。

一键生成迷宫-Word插件-大珩助手新功能

Word大珩助手是一款功能丰富的Office Word插件,旨在提高用户在处理文档时的效率。它具有多种实用的功能,能够帮助用户轻松修改、优化和管理Word文件,从而打造出专业而精美的文档。 【新功能】迷宫生成器 1、可自定义迷宫大小; …

古字画3d立体在线数字展览馆更高效便捷

在数字时代的浪潮中,大连图书馆以崭新的面貌跃然屏幕之上——3D全景图书馆。这座承载着城市文化精髓与丰富知识资源的数字图书馆,利用前沿的三维建模技术,为我们呈现了一个全新的知识世界。 随时随地,无论您身处何地,只…

C++STL---stack queue模拟实现

前言 对于这两个容器适配器的模拟实现非常简单,因为stack和queue只是对其他容器的接口进行了包装,在STL中,若我们不指明用哪种容器作为底层实现,栈和队列都默认是又deque作为底层实现的。 也就是说,stack和queue不管是…

js:flex弹性布局

目录 代码&#xff1a; 1、 flex-direction 2、flex-wrap 3、justify-content 4、align-items 5、align-content 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewp…

[论文笔记]AIOS: LLM Agent Operating System

引言 这是一篇有意思的论文AIOS: LLM Agent Operating System&#xff0c;把LLM智能体(代理)看成是操作系统。 基于大语言模型(LLMs)的智能代理的集成和部署过程中存在着许多挑战&#xff0c;其中问题包括代理请求在LLM上的次优调度和资源分配&#xff0c;代理和LLM之间在交互…

智能视频监控平台LntonCVS视频融合共享平台保障露营安全解决方案

在当今社会&#xff0c;都市生活的快节奏和压力使得越来越多的人渴望逃离城市的喧嚣&#xff0c;寻求一种短暂的慢生活体验。他们向往在壮丽的山河之间或宁静的乡村中露营&#xff0c;享受大自然的宁静与美好。随着露营活动的普及&#xff0c;露营地的场景也变得更加丰富多样&a…

干货分享:如何做好采购和供应链管理工作?

简单来说&#xff0c;采购是企业获取所需货物和材料的过程&#xff0c;而供应链管理是将这些货物转化为产品并尽可能高效地分发给客户。 但做好采购和供应链管理的关键是实现采购和供应商的协同管理。为什么这么说呢&#xff1f; 在成本方面&#xff0c;采供协同管理使得企业…

【Vue】单页应用程序介绍

通常基于Vue去开发一整个网站&#xff0c;开发出来的这整个网站应用&#xff0c;我们都会叫做单页应用程序 概念 单页应用程序&#xff1a;SPA【Single Page Application】是指所有的功能都在一个html页面上实现 我们可以将页面共用的部分封装成组件&#xff0c;底下要切换的也…

安卓虚拟屏幕锁屏画面源码分析部分KeyguardPresentation

背景&#xff1a; 在搞虚拟多屏和投屏相关业务时候&#xff0c;发现在锁屏时候一个画面比较特殊&#xff0c;但是明显我们自己也没有给虚拟屏幕和投屏有绘制过这个页面。 具体页面如下&#xff1a; 这个圈中小方框就是虚拟屏幕&#xff0c;在息屏待机时候居然也有个类似锁屏…

【Elasticsearch】IK分词器的下载及使用

安装IK分词器 网址&#xff1a;https://github.com/infinilabs/analysis-ik 3.1.在线安装ik插件&#xff08;较慢,不推荐&#xff09; # 进入容器内部 es为容器名称 docker exec -it es /bin/bash# 在线下载并安装 7.17.21为镜像版本要与之前保持一致 ./bin/elasticsearch-pl…

Docker|了解容器镜像层(1)

引言 容器非常神奇。它们允许简单的进程表现得像虚拟机。在这种优雅的底层是一组模式和实践&#xff0c;最终使一切运作起来。在设计的根本是层。层是存储和分发容器化文件系统内容的基本方式。这种设计既出人意料地简单&#xff0c;同时又非常强大。在今天的帖子[1]中&#xf…

前端 JS 经典:打印对象的 bug

1. 问题 相信这个 console 打印语句的 bug&#xff0c;其实小伙伴们是遇到过的&#xff0c;就是你有一个对象&#xff0c;通过 console&#xff0c;打印一次&#xff0c;然后经过一些处理&#xff0c;再通过 console 打印&#xff0c;发现两次打印的结果是一样的&#xff0c;第…