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

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

构建自动化API数据抓取系统

构建一个自动化API数据抓取系统是一个涉及多个技术领域的复杂任务。这样的系统不仅要求高效的数据获取能力,还需要有稳定的数据处理、存储和错误处理机制。 1. 需求分析 在开始构建之前,明确你的需求至关重要。你需要确定要抓取的API、数据的频率、数据的…

自然语言处理:第三十三章FILCO:过滤内容的RAG

文章链接: [2311.08377] Learning to Filter Context for Retrieval-Augmented Generation (arxiv.org) 项目地址: zorazrw/filco: [Preprint] Learning to Filter Context for Retrieval-Augmented Generaton (github.com) 在人工智能领域,尤其是在开放域问答和事…

240508Scala笔记

240508Scala笔记 Scala概述: SCala是Java的拓展,在Java的基础上又拓展了一些语法,例如: 输出Hello World println("HelloWorld")System.out.println("Hello Scala from Java") 上面两段代码都可以输出内容. package chapter01 ​ /*object: 关键字,声明…

4_XMR交易过程

XMR交易过程 参考文档 书: 《精通门罗币 : 私密交易的未来》(Mastering Monero) 书中的代码示例: 《精通门罗币 : 私密交易的未来》深入探究门罗币与密码学门罗币的环签名分析官方介绍视频 1.隐匿地址 Stealth Address_Monero官方介绍视频2.环签名 Ring Signature_Monero官方…

Cortex-M7——NVIC

Cortex-M7——NVIC 小狼http://blog.csdn.net/xiaolangyangyang 一、NVIC架构 二、中断及异常编号 三、中断屏蔽寄存器(__disable_irq和__enable_irq操作的是PRIMASK寄存器) 四、中断分组寄存器(SCB->AIRCR[10:8]) 五、NVIC寄…

【转】ES, 广告索引

思考: 1)直接把别名切换到上一个版本索引 --解决问题 2)广告层级索引如何解决? -routing、join 3)查询的过程:query and fetch, 优化掉fetch 4)segment合并策略 5)全量写入时副…

阿里云对象存储OSS简单使用

文章目录 概念基本概念Bucket 准备工作控制台操作对象存储OSSJava客户端操作对象存储OSS参考来源 概念 基本概念 阿里云对象存储 OSS是一款海量、安全、低成本、高可靠的云存储服务,提供最高可达 99.995 % 的服务可用性。而且提供了多种存储类型,降低我…

如何安装 CleanMyMac X 4.15.3破解版

CleanMyMac X 4.15.3破解版是一款专业的Mac系统清理软件,可一键智能扫描清理mac系统日志缓存磁盘垃圾和多余语言安装包,快速释放电脑内存,轻松管理和升级Mac上的应用。同时CleanMyMac X 破解版可以强力卸载恶意软件,修复系统漏洞&…

ChatGPT-4o在临床医学日常工作、数据分析与可视化、机器学习建模中的技术

2022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT-3.5,将人工智能的发展推向了一个新的高度。2023年11月7日,OpenAI首届开发者大会被称为“科技界的春晚”,吸引了全球广大…

Vue3_上传文件_下载文件

目录 一、上传文件 二、下载文件 vue3对接后端进行文件上传和下载。 一、上传文件 点击上传资料按钮,选择文件,进行上传。 创建一个proFile.vue,文件,这个文件可以作为一个子组件在其他页面引用。 组件用的element-Plus的ElM…

【Unity游戏制作】地精寻宝Gnome‘s Well That Ends Well卷轴动作游戏【一】场景搭建

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 专栏交流🧧&…

2024北京消防展6.26召开-看消防安全企业如何升级赋能

2024北京消防展6.26召开-看消防安全企业如何升级赋能 随着社会的快速发展,消防安全已经成为企业安全生产的重要一环。作为消防领域的品质盛会,2024中国(北京)消防技术与设备展览会将于6月26-28 日在北京.首钢会展中心召开&#xf…

【代码随想录】【算法训练营】【第31天】 [455]分发饼干 [376]摆动序列 [53]最大子序和

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 31,放假前的周五,总是令人激动的~ 题目详情 [455] 分发饼干 题目描述 455 分发饼干 解题思路 前提: 思路:贪心算法,小饼干优先满…

揭秘!如何从精益生产转向智能制造

企业在“工业4.0、智能制造、互联网”等概念满天飞的环境下迷失了方向,不知该如何下手,盲目跟风。 君不见,很多企业在“工业4.0、智能制造、互联网”等概念满天飞的环境下迷失了方向,不知该如何下手,盲目跟风&#xf…

【TB作品】MSP430F5529 单片机,温度控制系统,DS18B20,使用MSP430实现的智能温度控制系统

作品功能 这个智能温度控制系统基于MSP430单片机设计,能够实时监测环境温度并根据预设的温度报警值自动调节风扇和加热片的工作状态。主要功能包括: 实时显示当前温度。通过OLED屏幕显示温度报警值。通过按键设置温度报警值。实际温度超过报警值时&…

Linux网络编程——概念及实现双方聊天

网络编程的场景: 假设你面前有五座房子(服务器),你要走到其中一座房子的某一间,此时你站在五座房子面前很迷茫,突然,第二座房子上面有人在叫,并且用汉语(TCP/UDP&#xf…

seerfar丨OZON运营工具,OZON选品插件

随着全球电商市场的蓬勃发展,OZON作为俄罗斯及东欧地区的重要电商平台,吸引了众多中国商家的目光。然而,如何在OZON平台上脱颖而出,实现高效的商品运营,成为了众多商家亟待解决的问题。在这样的背景下,seer…

tailwindcss的@apply使用

tailwindcss的apply是把在html写的tailwindcss可以挪到style里面 简化页面的可读性 没写之前的 <section class"block-risk absolute flex flex-col items-center p-4 text-center left-0 text-white;" :style"{ top, left: 60px }"> </section…

【Week-R2】使用LSTM实现火灾预测(tf版本)

【Week-R2】使用LSTM实现火灾预测&#xff08;tf版本&#xff09; 一、 前期准备1.1 设置GPU1.2 导入数据1.3 数据可视化 二、数据预处理(构建数据集)2.1 设置x、y2.2 归一化2.3 划分数据集 三、模型创建、编译、训练、得到训练结果3.1 构建模型3.2 编译模型3.3 训练模型3.4 模…

移动安全赋能化工能源行业智慧转型

随着我国能源化工企业的不断发展&#xff0c;化工厂中经常存在火灾爆炸的危险&#xff0c;特别是生产场所&#xff0c;约有80%以上生产场所区域存在爆炸性物质。而目前我国化工危险场所移动通信设备的普及率高&#xff0c;但是对移动通信设备的安全防护却有所忽视&#xff0c;包…