Harmony开发基础

news2024/11/24 22:34:02

背景介绍

鸿蒙系统的开发一来是为了打破国外垄断,实现操作系统的国产化,另一方面是针对目前市场上出现大量新的移动设备,手表,折叠屏等,移动端程序要适配不同设备,需要维护一套代码下的多个版本,并且这些设备之间的交互还不很流畅,鸿蒙旨在解决这些问题,创造一个能一次开发,多端部署,并且能自由流转的生态环境。

首先华为自己的教程和社区已经很完善了,本文章纯粹用于记录和分享学习过程。

IDE环境

Harmony使用DevEco Studio进行开发,下载网址在此,看欢迎界面好像还是基于IntelliJ的。
在这里插入图片描述
新建工程会发现,他的目录结构很复杂,主要涉及他宣传的Stage模型,
目录结构
一些目录的作用如下:

AppScope > app.json5:应用的全局配置信息。
entry:HarmonyOS工程模块,编译构建生成一个HAP包。
src > main > ets:用于存放ArkTS源码。
src > main > ets > entryability:应用/服务的入口。
src > main > ets > entrybackupability:应用提供扩展的备份恢复能力。
src > main > ets > pages:应用/服务包含的页面。
src > main > resources:用于存放应用/服务所用到的资源文件,如图形、多媒体、字符串、布局文件等。关于资源文件。
src > main > module.json5:模块配置文件。主要包含HAP包的配置信息、应用/服务在具体设备上的配置信息以及应用/服务的全局配置信息。
build-profile.json5:当前的模块信息 、编译信息配置项,包括buildOption、targets配置等。
hvigorfile.ts:模块级编译构建任务脚本。
obfuscation-rules.txt:混淆规则文件。混淆开启后,在使用Release模式进行编译时,会对代码进行编译、混淆及压缩处理,保护代码资产。
oh-package.json5:用来描述包名、版本、入口文件(类型声明文件)和依赖项等信息。
oh_modules:用于存放三方库依赖信息。
build-profile.json5:工程级配置信息,包括签名signingConfigs、产品配置products等。其中products中可配置当前运行环境,默认为HarmonyOS。

hvigorfile.ts:工程级编译构建任务脚本。

oh-package.json5:主要用来描述全局配置,如:依赖覆盖(overrides)、依赖关系重写(overrideDependencyMap)和参数化配置(parameterFile)等。

主要就是在src/main/ets/pages页面文件中写前端代码,然后可以通过预览preview观察调整布局,
预览界面
实机调试可用设备usb连接,并打开开发者模式,shift+F10运行程序自动在真实设备上执行。

ArkTS基本语法

该语言基于TypeScript,而TypeScript又是基于JavaScript,大致区别就是相比JavaScript检查更严格。

声明(定义)方法

关键字 变量名:类型注释=值,变量的关键字使用let,常量使用const,如let conut:number=0,该语言为强类型,但当变量声明时进行了初始化,类型注释就可省。

可用给常用的变量起别名,用于避免变量名修改引起的大的改动,使用方法为:type 别名=变量名

类型

number整型和浮点均可以被该类型接收。
boolean布尔类型。
string字符串,可用${变量名}方法占位。
void用于指定函数没有返回值。
object所有引用类型的基类型。
Array数组,后跟<类型>限制内部数据类型。
Enum预先定义的一组命名值的值类型,如:enum ColorSet { Red, Green, Blue } let c: ColorSet = ColorSet.Red;
Union联合类型,可能类型有多个时使用,不同类型用|隔开。

语句

分支循环几乎与C一致,循环中多了与python类似的机制:for(let n of 数组或字符串),可实现自动遍历。

函数

使用fuction 函数名(参数列表):返回类型{函数体}的方式进行声明,其中参数中的可选参数用name?: 类型的形式表示。

一些短小的一句话函数可用用箭头函数,也就是其他语言的lambda函数来表示,形式为(参数列表):数据类型=>{函数体}

使用class 类名{}进行定义,创建实例时使用new关键字,方法直接使用方法名(参数):返回值类型{方法体}定义,构造函数为constructor,继承使用extends实现。

接口

用于约束和规范类的方法,接口定义的方法必须被重写,为了统一多个开发者的不同方法而产生,使用interface 接口名{方法和属性的声明}进行定义。

模块

export类名导出
import {类名} from 文件导入

UIAbility组件

应用能够正常使用UIAbility,需要在module.json5配置文件的abilities标签中声明UIAbility的名称、入口、标签等相关信息。

运行过程

是一种包含界面的应用组件,是系统调度的最小单元,比如微信程序中的支付界面和聊天界面分别是一个独立的UIAbility,有些类似计算机中进程的概念,但除了系统调度单元上并没有什么一致性,目前认为简单理解为窗口即可,或对应web中的html

系统对该组件的管理通过生命周期来实现,包括Create创建、Foreground前台、Background后台、Destroy销毁四个状态.

创建阶段首先回调onCreate()初始化操作,实例创建完成之后,在进入Foreground之前,系统会创建一个WindowStage,创建完成后会回调onWindowStageCreate()UI加载和设置事件,组件和WindowStage执行时的对应关系如下:
组件对应关系
onWindowStageCreate()回调中通过loadContent()方法设置应用要加载的页面,并根据需要调用on('windowStageEvent')方法订阅WindowStage的事件(获焦/失焦、可见/不可见)。

对应的,实例销毁之前会先回调onWindowStageDestroy()释放UI资源,销毁前最后执行onWindowStageWillDestroy()回调,此时WindowStage还可用。

前后台状态切换时会分别触发onForeground()onBackground()回调,分别用于申请系统资源和释放资源。

实例创建后进入后台再次唤醒时,UIAbility的onNewWant()回调,不会进入其onCreate()onWindowStageCreate()生命周期回调。应用可以在该回调中更新要加载的资源和数据等,用于后续的UI展示。

实例销毁时在onDestroy()回调中进行系统资源的释放、数据的保存等操作。

基本用法

首先是指定启动页面,否则打开程序只会白屏等待,在UIAbility的onWindowStageCreate()生命周期回调中,通过WindowStage对象的loadContent()方法设置启动页面。

在DevEco Studio中创建的UIAbility中,该UIAbility实例默认会加载Index页面,根据需要将Index页面路径替换为需要的页面路径即可。

可用this.content获取组件的上下文信息。

ArkUI方舟框架基础

理念

使用声明式UI语法,即告诉计算机最终的场景如何,由算法实现布局具体细节的实现,据说是与传统JavaScript+CSS结构不同,但目前来看没什么不一样,语法简洁了一些倒是真的。

应用状态驱动视图,即通过状态的转换来显示不同内容,状态变量通过@State 变量名:boolean的方法来定义。

声明

创建组件时首先使用修饰符@Entry指定页面入口,@Component声明自定义组件,然后使用struct 组件名{build(){组件信息}}描述组件。

build(){}内的组件可加布局修饰,Row为行排列,Column为列排列,还要列表和滚动行等。

示例代码如下
示例代码如下
一个组件由多个相同内容构成时,可以使用ForEach方法快速生成布局,使用方法为ForEach(数据Arry<>,(名称))=>组件,简单示例代码如下:
foreach方法

交互渲染

可用通过状态变量判断实现,在build方法中使用if判断,不同状态展示不同的数据,也可以给组件增加事件,如onClick(函数)来动态渲染。

网络交互

通过构造HTTP请求报文与网络进行交互,首先需要在配置文件module.json5中添加网络权限

  "requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"    //申请网络权限
      }
    ]

请求的一般过程如下:
1,开发时首先使用import { http } from '@kit.NetworkKit';引入网络模块;
2,通过let httpRequest = http.createHttp();
3,创建请求对象,该对象一一对应请求任务,不可复用;
httpRequest..request(url,{参数})方法发送http请求;
4,请求结束使用httpRequest.destroy();销毁请求。

应用数据持久化

用户首选项

用户的设置和配置等信息在制定完成后需要保存,且在用户打开该界面时需要自动配置完成,该功能就需要对用户的数据进行持久化保存,并后续恢复,Harmony通过用户首选项功能实现,该功能类似数据库,但为非关系型数据库,不保证遵循ACID原则,且只能应对轻量级数据,一般数据量少于一万条。

执行方法

用户首选项持久化文件的内容加载到Preferences实例,每个文件唯一对应到一个Preferences实例,存储采用键值对的方式实现,键值唯一不可重复,详细介绍在此,本文只介绍大致使用流程。

1,使用import { preferences } from '@kit.ArkData';导入模块
2,let per=preferences.getPreferences(this.context,实例名)获取实例
3,preferences.put(键名,键值)保存数据,写入后可使用flush方法持久化
4,preferences.get(键名,未获得的默认值)获取键值数据,未得到返回默认值,该步可写入页面的onPageShow周期内,以实现页面初始化时的自动配置过程

总结

经过几个小时学习,只能说是初步了解了Harmony开发,语言本身不难,复杂的是前端的太多操作,滚动,布局,装饰器限定等,原来日常用的设备有这么复杂,不过可以预料,熟练了以后应该就也是重复工作了,只是现在还差得远,不要眼高手低。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

U盘直接拔掉之后数据丢失怎么恢复 U盘数据丢失了怎么恢复

U盘作为一种存储设备&#xff0c;可以帮助人们存储很多资料文件&#xff0c;无论是办公文件&#xff0c;亦或是生活中的照片&#xff0c;所以在存储数据文件时&#xff0c;人们是比较依赖U盘。不过&#xff0c;U盘也存在很多的不确定性&#xff0c;比如数据容易丢失、或者损坏。…

NirCmd-sendkeysendkeypress

引入script [Script File] This command allows you to execute a sequence of commands stored inside the file specified in [Script File] parameter. Example: script "c:\temp\msg.ncl" Example for a script:infobox "Hello !" "This is the …

微知-如何查看服务器CPU当前运行主频?(cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq)

关键命令 cat /sys/devices/system/cpu/cpu1/cpufreq/scaling_cur_freq背景 首先lscpu可以查看到有多个cpu&#xff0c;里面也会显示cpu的频率&#xff0c;但是这里显示仅仅是规格&#xff0c;不是实际值。为了查看实际值&#xff0c;需要到/sys文件系统中查看&#xff0c;也…

大数据-167 ELK Elasticsearch 详细介绍 特点 分片 查询

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

ARIMA 模型初体验 —— 预测股票数据

第 1 步&#xff0c;从 twelvedata 上获取苹果 11 号 15:30 到 16:00 的 OHLC、成交量 数据。 第 2 步&#xff0c;编写 Python 代码&#xff08;实际上可以用 R 语言&#xff0c;R 语言从语言的级别对分析预测提供了支持&#xff0c;而 Python 需要第三方库&#xff09;。 …

Yolov8 搭配 Frequency-aware Feature Fusion for Dense Image Prediction

个人觉得论文赞的地方 https://github.com/Linwei-Chen/FreqFusion https://www.arxiv.org/abs/2408.12879 因为我有个项目需要训练边界模糊的情况,但又需要目标能在模糊里凸显出来,就是看到这张图以后觉得很赞,边界变得清晰有特征是我想要的,所以尝试用了 使后感 哈哈…

【CSS3】css开篇基础(2)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

数据结构-5.2.树的性质

一.树的常考性质&#xff1a; 性质1&#xff1a;结点数 总度数 1(结点的度&#xff1a;结点分支的数量) 一个分支中&#xff0c;如父结点B&#xff0c;两个子结点为E和F&#xff0c;结点B的度的值为2&#xff0c;等于子结点数量&#xff0c;加上这一个父结点(父结点只能有一…

【计算机网络 - 基础问题】每日 3 题(三十九)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…

大型语言模型(LLMs)关键技术指南

在AI这个超火的领域&#xff0c;打好基础真的超级重要&#xff0c;尤其是当你开始研究那些超大型的语言模型&#xff0c;也就是LLMs的时候。这个指南就是想帮新手们把那些听起来高大上的概念变得简单易懂&#xff0c;比如神经网络、自然语言处理&#xff08;NLP&#xff09;还有…

【ROS2实操一】话题通信与自定义消息

一、准备工作 1.请先创建工作空间 mkdir -p ws01_plumbing/src //创建工作空间 colcon build //在工作空间目录下编译 2.创建专门的接口功能包定义接口文件(需要注意的是&#xff0c;目前为止无法在Python功能包中定义接口文件)&#xff0c;终端下进…

线程基础学习

线程的实现 通过实现Runnable接口的方式&#xff0c;实现其中的run方法。继承Thread类&#xff0c;然后重写其中的run方法。通过线程池创建线程&#xff0c;默认采用DefaultThreadFactory。有返回值的callable&#xff0c;实现callable接口&#xff0c;实行call方法。 本质上…

wait和waitpid

在Linux中&#xff0c;wait 和 waitpid 是用于进程控制的系统调用&#xff0c;它们主要用来让父进程等待子进程的终止&#xff0c;并获取子进程的退出状态。下面详细介绍它们的用法和区别。 1. wait() 函数 wait() 会阻塞调用进程&#xff0c;直到一个子进程终止。它的典型用…

怎么ping网络ip地址通不通

怎么Ping网络IP地址通不通&#xff1f;要检查网络中的IP地址是否连通&#xff0c;可以使用‌Ping命令。Ping命令通过发送ICMP&#xff08;Internet Control Message Protocol&#xff0c;因特网控制消息协议&#xff09;Echo请求报文并等待回应&#xff0c;来判断目标主机是否可…

ARP限制网速攻击

ARP限制网速攻击 大家没想到吧&#xff0c;ARP还能限制对方网速。当kali欺骗了网关和受害者的时候&#xff0c;受害者访问网络就需要经过kali的网卡&#xff0c;那我们限制kali网卡的速度或者转发的速度就可以限制对方的网速。这里可以使用的工具有tc、iptables、WonderShaper…

Unix Standardization and Implementations

Unix标准化 在Unix未制定较为完备的标准时&#xff0c;各个平台的系统调用方式各异&#xff0c;所开发出的应用程序存在可移植性差的特点&#xff0c;因此人们呼吁指定一套Unix标准来规范接口&#xff0c;增加应用程序的可移植性。所谓Unix标准即适用于Unix环境下的一系列函数…

AI 时代技术盛宴 —— 稀土掘金 × 豆包 MarsCode 青训营等你来!

各位 CSDN 的小伙伴们&#xff0c;今天我要给大家带来一个超级棒的消息&#xff01;稀土掘金与豆包 MarsCode 强强联手&#xff0c;共同打造的青训营再次上线啦&#xff01; 在这个飞速发展的 AI 时代&#xff0c;这场青训营玩出了不一样的精彩。它携手 AI 伙伴豆包 MarsCode&…

一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景

文章目录 一、常用数据库概览1.1 关系型数据库1.2 非关系型数据库1.2.1 KV数据库1.2.2 文档型数据库1.2.3 列式存储数据库1.2.4 图数据库 1.3 SQL与NoSQL区别1.3.1 结构化与非结构化1.3.2 关联和非关联1.3.3 查询方式1.3.4 事务1.3.5 总结 二、MySQL三、PostgreSQL3.1 特点、适…

计组_中断响应条件

2024.10.13&#xff1a;计算机组成原理学习笔记 中断响应条件 条件1&#xff1a;CPU要处于开中断状态条件2&#xff1a;至少要有一个未被屏蔽的中断请求屏蔽&#xff1f;中断优先级屏蔽字的作用 条件3&#xff1a;当前指令刚执行完 条件1&#xff1a;CPU要处于开中断状态 当CP…

Redis:分布式 - 主从复制

Redis&#xff1a;分布式 - 主从复制 概念配置主从模式info replicationslave-read-onlytcp-nodelay 命令slaveof 主从结构一主一从一主多从 主从复制流程数据同步命令全量同步部分同步实时同步 节点晋升 概念 Redis的最佳应用&#xff0c;还是要在分布式系统中。对于非分布式…