【干货】10分钟掌握鸿蒙OS应用程序开发的核心内容

本文章提炼于大家一起学鸿蒙OS应用程序开发视频教程:

https://blog.csdn.net/dongyu1009/article/details/108685024

如果希望了解详细内容,可进入上述网页进入视频教程的学习!

本文档长期更新,希望大家关注。如果有任何的意见和建议,欢迎提出,谢谢!

1 鸿蒙OS及其架构

1.1 什么是鸿蒙OS?

鸿蒙OS是华为自主研发的开源操作系统。

一句话概括:鸿蒙 OS 是基于微内核全场景分布式操作系统。

  • 微内核:提升安全性、稳定性和可维护性。
  • 全场景:可应用在各种各样的硬件设备上,不仅限于移动设备。
  • 分布式:对于用户而言,多个运行鸿蒙OS的设备可以形成形成“超级虚拟终端”,进行资源、性能和数据的共享。

鸿蒙OS应用程序需要通过Java语言开发,其开发流程上与Android高度相似,但其底层架构与Android不同。

1.2 鸿蒙OS的架构

鸿蒙OS的架构

2  DevEco Studio

2.1 什么是DevEco Studio

DevEco Studio 是建立在 IntelliJ IDEA Community开源版本的基础之上集成开发环境( IDE )。

  • DevEco Studio 1.0 用于对 EMUI 的定制开发。
  • DevEco Studio 2.0 用于 HarmonyOS 应用程序的开发

2.2 DevEco Studio的特点

  • 多设备统一开发环境,包括智慧屏、穿戴设备等。
  • 支持多语言的代码开发和调试,包括Java、Kotlin、C、C++、JavaScript等。
  • 支持 FA 和 PA 快速开发。
  • 支持多设备模拟器。目前,模拟器放置在华为官方的服务器中,需要通过远程连接的方式访问使用。

2.3 DevEco Studio的安装

下载地址为:https://developer.harmonyos.com/cn/develop/deveco-studio#download

需要使用JS设计界面的开发者,需要下载并安装Node.js。

3 Ability的基本概念和用法

3.1 鸿蒙OS应用程序包

鸿蒙OS应用程序包(Application Package)的后缀名为.app,包含了一个获得多个HAP(HarmonyOS Ability Package)。

HAP的两个类型:Entry和Feature。

  • Entry:应用的主模块。相当于Windows中的exe文件。对于同一设备类型必须有且只有一个entry类型的HAP,可独立安装运行。
  • Feature:应用的动态特性模块。相当于Windows中的dll文件。可以提供UI界面、类库、资源等。

详情可参考官方说明:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/harmonyos-architecture-0000000000011919

3.2 Ability的概念和分类

Ability是鸿蒙OS应用程序开发的核心。相当于Android中的Activity,但是比Activity的功能更为强大,不仅可以提供UI界面,也可以提供服务和数据接口。

Ability包含了FA和PA两类,PA又包括了Service Ability和Data Ability两类,如下图所示。

Ability包含1个或者多个AbilitySlice。AbilitySlice是指应用的单个页面及其控制逻辑的总和。AbilitySlice页面提供的业务能力应具有高度相关性。

详情可参考官方说明:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-ability-overview-0000000000029852

3.3 Ability的生命周期

  • onStart() :创建 Ability 时触发,仅触发 1 次。
  • onActive() :进入前台时触发。
  • onForeground() :可见时触发。
  • onBackground() :不可见时触发。
  • onInActive() :失去交点时触发。
  • onStop() :销毁 Ability 时触发,仅触发 1 次。

具体可参见官方说明:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-page-lifecycle-0000000000029840

3.4 Ability的跳转

跳转到另外一个Ability的代码:

Intent secondIntent = new Intent();
Operation operation = new Intent.OperationBuilder()
        .withDeviceId("")
        .withBundleName("com.example.customtimer")
        .withAbilityName("com.example.customtimer.SecondaryAbility")
        .build();
secondIntent.setOperation(operation);
startAbility(secondIntent);

返回到上一个Ability的代码:

terminateAbility();

详情可参考官方说明:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ability-page-switching-0000000000037999

4 常用组件和布局

4.1 常用组件 - 文本

文本的创建:

// 创建文本对象
Text text = new Text(this);
// 设置布局参数设置
text.setLayoutConfig(config);
// 设置文本
text.setText("Hello, HarmonyOS!");
// 设置文字颜色
text.setTextColor(new Color(0xFF000000));
// 设置字体大小
text.setTextSize(50);
// 设置文字的居中方式
text.setTextAlignment(TextAlignment.CENTER);
// 在布局中添加文本框
myLayout.addComponent(text);

4.2 常用组件 - 按钮

按钮的创建:

// 创建按钮
Button button = new Button(this);
// 设置按钮布局参数
LayoutConfig configButton = new LayoutConfig(LayoutConfig.MATCH_CONTENT, LayoutConfig.MATCH_CONTENT);
configButton.addRule(LayoutConfig.CENTER_IN_PARENT);
button.setLayoutConfig(configButton);
// 设置按钮文本
button.setText("我是一个按钮!");
// 设置按钮文本的字号
button.setTextSize(50);
// 监听按钮的单击事件
button.setClickedListener(new Component.ClickedListener() {
    @Override
    public void onClick(Component component) {
        HiLog.info(lblInformation, "按钮已经被点击了!");
    }
});
// 修改按钮的背景为灰色
ShapeElement shapeElement = new ShapeElement();
shapeElement.setRgbColor(new RgbColor(200, 200, 200));
button.setBackground(shapeElement);
// 在布局中添加按钮
myLayout.addComponent(button);

4.3 线性布局 -DirectionalLayout 

DirectionalLayout 可将内部的组件通过横向( horizontal )或纵向( vertical )排列。

线性布局的创建:

private DirectionalLayout myLayout = new DirectionalLayout(this);

设置线性布局的方向:

myLayout.setOrientation(Component.HORIZONTAL);

通过组件LayoutConfig的alignment属性可设置居中方式,通过weight设置所占布局的比例。

4.4相对布局 - DependentLayout

通过相对布局,每个组件可以指定相对于其他同级元素的位置,或者指定相对于父组件的位置。

相对于同级组件的位置关系:

布局位置( Java ) 布局位置( XML ) 描述
ABOVE above 处于同级组件的上侧。
BELOW below 处于同级组件的下侧。
START_OF start_of 处于同级组件的起始侧。
END_OF end_of 处于同级组件的结束侧。
LEFT_OF left_of 处于同级组件的左侧。
RIGHT_OF right_of 处于同级组件的右侧。

相对于父级组件的位置关系:

布局位置( Java ) 布局位置( XML ) 描述
ALIGN_PARENT_LEFT align_parent_left 处于父组件的左侧。
ALIGN_PARENT_RIGHT align_parent_right 处于父组件的右侧。
ALIGN_PARENT_START align_parent_start 处于父组件的起始侧。
ALIGN_PARENT_END align_parent_end 处于父组件的结束侧。
ALIGN_PARENT_TOP align_parent_top 处于父组件的上侧。
ALIGN_PARENT_BOTTOM align_parent_bottom 处于父组件的下侧。
CENTER_IN_PARENT center_in_parent 处于父组件的中间。

5 控制台输出

5.1 HiLog与HiLogLabel

HiLog 用于控制台输出调试,包括 debug 、 info 、 warn 、 error 、 fatal 等方法。

调试方法 说明
debug(HiLogLabel label, String format, Object... args) 输出调试信息
info(HiLogLabel label, String format, Object... args) 输出一般信息
warn(HiLogLabel label, String format, Object... args) 输出警告信息
error(HiLogLabel label, String format, Object... args) 输出错误信息
fatal(HiLogLabel label, String format, Object... args) 输出严重错误信息

HiLog 的输出需要 HiLogLabel 的支持。

HiLogLabel 的构造方法签名为 public HiLogLabel(int type, int domain, String tag)。其各个参数的含义如下:

  • Type : HiLogLabel 类型,包括HiLog.DEBUG 、 HiLog.ERROR 、 HiLog.FATAL 、 HiLog.INFO 、 HiLog.LOG_APP 、 HiLog.WARN 。
  • domain :定义服务域( Service Domain ),相似的输出使用相似的服务域。范围从 0x0 到0xFFFFF 。前三位通常为子系统( SubSystem )名称,后两位通常为模块( Module )名称。
  • tag :标签名称。

HiLogLabel 通常定义为静态变量。其常用方法如下:

HiLogLabel的定义:

static final HiLogLabel lblInformation = new HiLogLabel(HiLog.LOG_APP, 0x00101, "测试");

HiLog输出方法:

HiLog.info(lblInformation, "Hi,Log!");

5.2 HiLog 的格式化输出

HiLog支持格式化输出,但基本的java格式化字符串的基础上,增加了{private}和{public}标识符:

HiLog.warn(label, "Failed to visit %{private}s, reason:%{public}d.", url, errno);
  • {private} 用于指定为私有输出
  • {public} 用于指定为公有输出

6 多线程与UI更新

多线程可用在需要处理长时间等待的任务中,例如网络访问和数据库访问等。在 HarmonyOS 中, 任务分发器(TaskDispatcher )可用来分发不同的任务。任务的优先级分为 HIGH 、 DEFAULT 和 LOW 。

任务分发器(TaskDispatcher )的类型如下:

  • GlobalTaskDispatcher :全局并发任务分发器
  • ParallelTaskDispatcher :并发任务分发器
  • SerialTaskDispatcher :串行任务分发器
  • SpecTaskDispatcher :专有任务分发器

通过任务分发器进入UI线程更新UI的代码如下:

getUITaskDispatcher().asyncDispatch(new Runnable() {
    @Override
    public void run() {
        // 更新UI界面
    }
});

详情可参加官方说明:

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/thread-mgmt-guidelines-0000000000032130

猜你喜欢

转载自blog.csdn.net/dongyu1009/article/details/108697116