您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > 鸿蒙

HarmonyOS (鸿蒙操作系统)你值得拥有

时间:2022-02-04 17:24:44  来源:  作者:Candy.W

今天我们来谈谈当下最火爆的万物互联的操作系统—Harmony OS,这是国人的骄傲,也是每一个中华儿女值得去学习和研究的国产操作系统。在这里主要是想通过自己所写的一个小 Demo 来初探一下 Harmony OS 系统下的 App 应用开发,如有不对之处还望指出,共勉之。

 

Step 1: 开发环境的搭建

IDE & SDK 的安装就不在这里详细讲解了,华为的官网上面既有安装包也有相关的步骤,相信大家可以通过文档自行完成。

 

Step2: app开发的相关术语学习(摘至华为官网)

第一部分:系统的定义

HarmonyOS 是一款“面向未来”、面向全场景(移动办公、运动健康、社交通信、媒体娱乐等)的分布式操作系统。

 

第二部分:开发app应用程序包结构

HarmonyOS 的用户应用程序包以APP Pack(Application Package)形式发布,它是由一个或多个 HAP(HarmonyOS Ability Package)以及描述每个 HAP 属性的pack.info组成。


HAP 是 Ability 的部署包,HarmonyOS 应用代码围绕 Ability 组件展开。
一个 HAP 是由代码、资源、第三方库及应用配置文件组成的模块包,可分为 entry 和feature 两种模块类型。

 

Entry

entry:应用的主模块。
一个APP中,对于同一设备类型必须有且只有一个entry类型的HAP,可独立安装运行。

 

Feature

feature:应用的动态特性模块。
一个 APP 可以包含一个或多个 feature 类型的 HAP,也可以不包含。只有包含 Ability 的 HAP 才能够独立运行。

 

Ability

Ability 是应用所具备的能力的抽象,一个应用可以包含一个或多个 Ability。
Ability 分为两种类型:FA(Feature Ability)和 PA(Particle Ability)。
FA/PA 是应用的基本组成单元,能够实现特定的业务功能。FA有UI界面,而PA无UI界面。

 

库文件

库文件是应用依赖的第三方代码(例如so、jar、bin、har等二进制文件),存放在 libs 目录。

 

资源文件

应用的资源文件(字符串、图片、音频等)存放于 resources 目录下,便于开发者使用和维护,详见资源文件的分类。

 

配置文件

配置文件 (config.json) 是应用的 Ability 信息,用于声明应用的 Ability,以及应用所需权限等信息,详见应用配置文件。

 

pack.info

描述应用软件包中每个 HAP 的属性,由 IDE 编译生成,应用市场根据该文件进行拆包和 HAP 的分类存储。


HAP 的具体属性包括:
delivery-with-install: 表示该 HAP 是否支持随应用安装。“true”:表示支持随应用安装;“false”:表示不支持随应用安装。

name:HAP 文件名。

module-type:模块类型,entry 或 feature。

device-type:表示支持该 HAP 运行的设备类型。

HAR(HarmonyOS Ability Resources)可以提供构建应用所需的所有内容,包括源代码、资源文件和 config.json 文件。HAR 不同于 HAP,HAR 不能独立安装运行在设备上,只能作为应用模块的依赖项被引用。

用户应用程序泛指运行在设备的操作系统之上,为用户提供特定服务的程序,简称“应用”。

在 HarmonyOS 上运行的应用,有两种形态:
传统方式的需要安装的应用。
提供特定功能,免安装的应用(即原子化服务)。

 

第三部分:开发过程中常见的术语解释

Page 与 AbilitySlice

Page 模板(以下简称“Page”)是 FA 唯一支持的模板,用于提供与用户交互的能力。一个Page 可以由一个或多个 AbilitySlice 构成,AbilitySlice 是指应用的单个页面及其控制逻辑的总和。

 

当一个 Page 由多个 AbilitySlice 共同构成时,这些 AbilitySlice 页面提供的业务能力应具有高度相关性。例如,新闻浏览功能可以通过一个 Page 来实现,其中包含了两个AbilitySlice:一个 AbilitySlice 用于展示新闻列表,另一个 AbilitySlice 用于展示新闻详情。

 

Intent

Intent 是对象之间传递信息的载体。例如,当一个 Ability 需要启动另一个 Ability 时,或者一个 AbilitySlice 需要导航到另一个 AbilitySlice 时,可以通过 Intent 指定启动的目标同时携带相关数据。

 

Ability

Ability 是应用所具备能力的抽象,也是应用程序的重要组成部分。
一个应用可以具备多种能力(即可以包含多个 Ability ),HarmonyOS 支持应用以 Ability 为单位进行部署。Ability 可以分为 FA(Feature Ability)和 PA(Particle Ability)两种类型,每种类型为开发者提供了不同的模板,以便实现不同的业务功能。

 

FA 支持 Page Ability:
Page 模板是 FA 唯一支持的模板,用于提供与用户交互的能力。一个 Page 实例可以包含一组相关页面,每个页面用一个 AbilitySlice 实例表示。

 

PA 支持 Service Ability 和 Data Ability:
Service 模板:用于提供后台运行任务的能力。
Data 模板:用于对外部提供统一的数据访问抽象。

 

Service Ability 基本概念

基于 Service 模板的 Ability(以下简称“Service”)主要用于后台运行任务(如执行音乐播放、文件下载等),但不提供用户交互界面。


Service 可由其他应用或 Ability 启动,即使用户切换到其他应用,Service 仍将在后台继续运行。Service 是单实例的。在一个设备上,相同的 Service 只会存在一个实例。如果多个 Ability 共用这个实例,只有当与 Service 绑定的所有 Ability 都退出后,Service 才能够退出。

 

由于 Service 是在主线程里执行的,因此,如果在 Service 里面的操作时间过长,开发者必须在 Service 里创建新的线程来处理(详见线程间通信),防止造成主线程阻塞,应用程序无响应。

 

Data Ability基本概念

使用 Data 模板的 Ability(以下简称“Data”)有助于应用管理其自身和其他应用存储数据的访问,并提供与其他应用共享数据的方法。Data 既可用于同设备不同应用的数据共享,也支持跨设备不同应用的数据共享。


数据的存放形式多样,可以是数据库,也可以是磁盘上的文件。Data 对外提供对数据的增、删、改、查,以及打开文件等接口,这些接口的具体实现由开发者提供。

 

备注:以上是一些在进行 Harmony OS app 应用开发过程中会经常涉及到的一些概念的东西,也是非常重要的,有一定的理解后将有利于我们进行系统的开发,所以我整理了一下放到了第二部分。

 

Step3:Demo 示例讲解

第一部分:程序结构与程序入口

HarmonyOS (鸿蒙操作系统)你值得拥有

 


如上图所示:entry 是应用的主模块,
1——标识的地方是 Slice 切片,
2——标识的地方是 main 方法所在的类文件,
3——标识的地方是存放样式文件,
4——标识的地方是存放的布局文件。

 

第二部分:两个Slice 文件内容

package com.example.myapplication.slice;
import com.example.myapplication.ResourceTable;
import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Component;

public class MainAbilitySlice extends AbilitySlice {
    /*
    onStart()
      当系统首次创建Page实例时,触发该回调。对于一个Page实例,该回调在其生命周期过程中仅触发一次,
      Page在该逻辑后将进入INACTIVE状态。开发者必须重写该方法,并在此配置默认展示的AbilitySlice。
     */
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        //ResourceTable相应当selenium中的driver,这里要是在设置布局为 ability_main.xml文件的内容,前面的Layout_是框架规则好的
        super.setUIContent(ResourceTable.Layout_ability_main);

        //类似于Python 中selenium中的通过 id 来查找元素,这里的Id_button是ability_main.xml中的button 的id值
        Button button = (Button) findComponentById(ResourceTable.Id_button);

        //判断button 是否为null
        if(button != null){
            //给button 设置click监听事件
            button.setClickedListener(new Component.ClickedListener() {
                @Override
                public void onClick(Component component) {
                    //这里相当于是render另一个页面(这里传入了一个SecondAbilitySlice and Intent),实现了页面的跳转
                    present(new SecondAbilitySlice(),new Intent());
                }
            });
        }
    }

    /*
    onActive()
      Page会在进入INACTIVE状态后来到前台,然后系统调用此回调。Page在此之后进入ACTIVE状态,
     该状态是应用与用户交互的状态。Page将保持在此状态,除非某类事件发生导致Page失去焦点,
     比如用户点击返回键或导航到其他Page。当此类事件发生时,会触发Page回到INACTIVE状态,
     系统将调用onInactive()回调。此后,Page可能重新回到ACTIVE状态,系统将再次调用onActive()回调。
     因此,开发者通常需要成对实现onActive()和onInactive(),并在onActive()中获取在onInactive()中被释放的资源。
     */
    @Override
    public void onActive() {
        super.onActive();
    }
    /*
    onForeground()
      处于BACKGROUND状态的Page仍然驻留在内存中,当重新回到前台时(比如用户重新导航到此Page),
      系统将先调用onForeground()回调通知开发者,而后Page的生命周期状态回到INACTIVE状态。
      开发者应当在此回调中重新申请在onBackground()中释放的资源,最后Page的生命周期状态进一步回到ACTIVE状态,
      系统将通过onActive()回调通知开发者用户。
     */
    @Override
    public void onForeground(Intent intent) {
        super.onForeground(intent);
    }
}
package com.example.myapplication.slice;

import ohos.aafwk.ability.AbilitySlice;
import ohos.aafwk.content.Intent;
//import ohos.global.systemres.ResourceTable;
import com.example.myapplication.ResourceTable;
import ohos.agp.components.Button;
import ohos.agp.components.Component;
import ohos.agp.components.Text;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;


public class SecondAbilitySlice extends AbilitySlice {
    private static final int MY_MODULE = 200;

    @Override
    protected void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_second_slice);

        Text text = (Text) findComponentById(ResourceTable.Id_second_text);
        if(text != null){
            String myname = intent.getStringParam("name");
            final HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, MY_MODULE, "MY_TAG_Tony"); //MY_MODULE=0x00201
            HiLog.info(label, "the myname is:", myname);
        }
        //这里跟MailAbilitySlice中的作用一样,找button元素,这个元素就是Go Back
        Button button=(Button) findComponentById(ResourceTable.Id_seconde_button);

        if(button != null){
            button.setClickedListener(new Component.ClickedListener() {
                @Override
                public void onClick(Component component) {
                    present(new MainAbilitySlice(),new Intent());
                }
            });
        }
    }
}

 

第三部分:两个 Layout 布局和一个 graphic 文件内容

HarmonyOS (鸿蒙操作系统)你值得拥有

 


HarmonyOS (鸿蒙操作系统)你值得拥有

 


HarmonyOS (鸿蒙操作系统)你值得拥有

 

备注:

  1. 表示的是文本框,里面的 ohos:text 表示文本的内容
  2. 表示的是按钮,里面的 ohos:id 表示元素的id值
  3. 里面的 ohos:text 表示按钮的文本内容
  4. 里面的 ohos:background_element 表示背景(就是css)
  5. Graphic 文件夹下存放的是样式文件,在Button 和 Text 里面可以引用这个里面的样式,如上图中的第三张图所示。
  6. 在开发过程中,如 layout 目录下文件名和 id 值及 graphic 目录下的文件名在IDE中是有联想选择的,有的会拼接上一些固定字符串。
  7. Import 导入第三方包时,一定要注意导入是正确的,在开发过程中发现有同名包,但是不是我们想要使用的,就会一直报错。

 

第四部分:运行后得到的效果图如下所示(这里选择的设备为 iphone)

实现的场景非常的简单,就是点击下面第一张图中的 Go 时(绑定了 click 监听事件),就跳转到如下第二张图中去,这里是切换到了另一个 Slice 的 page。当再点击此张图片中的 Go Back时,又能够回到第一张图的界面。

HarmonyOS (鸿蒙操作系统)你值得拥有

 


HarmonyOS (鸿蒙操作系统)你值得拥有

 



Tags:HarmonyOS   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
近日HarmonyOS 3.0开发者Beta正式推送,不少网友都收到了鸿蒙3.0开发者申请通过的通知。根据此前招募公告来看,支持此次升级的测试的设备包括:华为P50、P50 Pro、P50 Pocket、Ma...【详细内容】
2022-07-06  Tags: HarmonyOS  点击:(19)  评论:(0)  加入收藏
【手机中国】智能手机早已经成为了我们日常生活中不可或缺的产品,它们或许扮演着生产力工具,或许扮演着娱乐工具也或许扮演着社交工具等各种各样的角色。每个人的手机里也都有...【详细内容】
2022-06-23  Tags: HarmonyOS  点击:(17)  评论:(0)  加入收藏
IT之家 6 月 15 日消息,据华为官网消息,鸿蒙 HarmonyOS 3.0 开发者 Beta 版本已开启公测招募。据官方介绍,HarmonyOS 3.0 开发者 Beta 版极大增强 JS / eTS 语言应用开发能力,同...【详细内容】
2022-06-15  Tags: HarmonyOS  点击:(21)  评论:(0)  加入收藏
下载开发工具:https://developer.harmonyos.com从链接 https://developer.harmonyos.com/cn/docs/documentation/doc-guides/document-outline-0000001064589184获得开发指南...【详细内容】
2022-02-16  Tags: HarmonyOS  点击:(118)  评论:(0)  加入收藏
今天继续分享有关 HarmonyOS 系统的开发组件布局类的知识,我们将在此系统上进行 App 应用开发,主要内容是讲常用的组件布局类有哪些以及它们的使用方式。分享的逻辑是先学习布...【详细内容】
2022-02-07  Tags: HarmonyOS  点击:(113)  评论:(0)  加入收藏
今天我们来谈谈当下最火爆的万物互联的操作系统—Harmony OS,这是国人的骄傲,也是每一个中华儿女值得去学习和研究的国产操作系统。在这里主要是想通过自己所写的一个小...【详细内容】
2022-02-04  Tags: HarmonyOS  点击:(266)  评论:(0)  加入收藏
新科技,新技术对于追随潮流年轻一族的来说可以轻松玩转,但对于老年群体来说总会有些力不从心。今天和大家分享华为鸿蒙HarmonyOs2.0对于老年群体更方便的几个使用方法,我们一起...【详细内容】
2021-12-21  Tags: HarmonyOS  点击:(105)  评论:(0)  加入收藏
鸿蒙开始于 2012 年,虽一开始定位于物联网方向,但到如今,已经发展为一款可兼容 Android 应用的跨平台操作系统. 最新的 2.0 的官方描述是: HarmonyOS 是新一代的智能终端操...【详细内容】
2021-06-18  Tags: HarmonyOS  点击:(592)  评论:(0)  加入收藏
HarmonyOS开发初体验,一步一步来,从零开始!1、下载安装,这个不必多说。下载和安装等2、启动运行 安装后就可以双击启动了,安装基本就是傻瓜式安装,一路next就可以了。启动后的页面...【详细内容】
2021-06-18  Tags: HarmonyOS  点击:(239)  评论:(0)  加入收藏
一、设计布局<Button ohos:height="match_content" ohos:width="match_parent" ohos:id="$+id:GetAPPInfo" ohos:padding="5fp" ohos:top_margin="10fp"...【详细内容】
2021-05-14  Tags: HarmonyOS  点击:(634)  评论:(0)  加入收藏
▌简易百科推荐
近日,HarmonyOS 2推出全新版本,本次带来了AI隐私保护、图库、服务中心等众多特性新升级,欢迎大家体验。 鸿蒙系统现在越来越完善,适配的机型也越来越多,大家赶快看看自己的机...【详细内容】
2022-05-11  中关村在线    Tags:鸿蒙系统   点击:(105)  评论:(0)  加入收藏
在开始本章正式内容之前先补充讲一下前面章节没有讲到的一个小细节问题。在我们每次关闭DevEco Studio不要直接点击右上角的关闭按钮,而是选择菜单“文件 > 关闭项目” 这样...【详细内容】
2022-04-12  李景能    Tags:JavaScript UI   点击:(222)  评论:(0)  加入收藏
下载开发工具:https://developer.harmonyos.com从链接 https://developer.harmonyos.com/cn/docs/documentation/doc-guides/document-outline-0000001064589184获得开发指南...【详细内容】
2022-02-16  活力行动    Tags:HarmonyOS   点击:(118)  评论:(0)  加入收藏
今天继续分享有关 HarmonyOS 系统的开发组件布局类的知识,我们将在此系统上进行 App 应用开发,主要内容是讲常用的组件布局类有哪些以及它们的使用方式。分享的逻辑是先学习布...【详细内容】
2022-02-07  Candy.W    Tags:HarmonyOS   点击:(113)  评论:(0)  加入收藏
今天我们来谈谈当下最火爆的万物互联的操作系统&mdash;Harmony OS,这是国人的骄傲,也是每一个中华儿女值得去学习和研究的国产操作系统。在这里主要是想通过自己所写的一个小...【详细内容】
2022-02-04  Candy.W    Tags:HarmonyOS   点击:(266)  评论:(0)  加入收藏
百度地图开放平台现在也开始推出自己的HarmonyOS地图SDK轻量版,这表示我们的百度地图开发者也能在HarmonyOS系统开发环境中接入百度地图的地图服务功能,而且安卓开发工程师也...【详细内容】
2021-12-30  猪小P数码空间    Tags:鸿蒙APP   点击:(440)  评论:(0)  加入收藏
在上一篇帖子《使用Python开发鸿蒙设备程序(1-GPIO外设控制)》中,已经成功的使用 Python 对 GPIO 上的外设进行了控制。这其实不是什么大不了的事,从功能的角度也着实不值得炫耀...【详细内容】
2021-09-23  鸿蒙开发者老王  微信公众号  Tags:开发鸿蒙   点击:(208)  评论:(0)  加入收藏
鸿蒙编程要用到Java,现在还是菜鸟阶段,先练基础吧。而且白天要工作,只能晚上学习,希望能坚持下去。根据教程,这次提供了一个for语句,以前大学时学过,感觉应该比较简单,先打开记事本...【详细内容】
2021-06-25  浮云终散尽    Tags:鸿蒙系统   点击:(293)  评论:(0)  加入收藏
华为开发者大会已经结束不久,我想大家应该都知道鸿蒙系统是基于什么语言开发的了。实际上大部分操作系统的开发基本上离不开C/C++、汇编语言、Java这三种编程语言。不过,我相...【详细内容】
2021-06-24  鸿蒙开发者老王    Tags:鸿蒙OS   点击:(271)  评论:(0)  加入收藏
鸿蒙开始于 2012 年,虽一开始定位于物联网方向,但到如今,已经发展为一款可兼容 Android 应用的跨平台操作系统. 最新的 2.0 的官方描述是: HarmonyOS 是新一代的智能终端操...【详细内容】
2021-06-18  燚磕工作室    Tags:HarmonyOS   点击:(592)  评论:(0)  加入收藏
站内最新
站内热门
站内头条