本文章提炼于大家一起学鸿蒙OS应用程序开发视频教程:
https://blog.csdn.net/dongyu1009/article/details/108685024
如果希望了解详细内容,可进入上述网页进入视频教程的学习!
本文档长期更新,希望大家关注。如果有任何的意见和建议,欢迎提出,谢谢!
1 鸿蒙OS及其架构
1.1 什么是鸿蒙OS?
鸿蒙OS是华为自主研发的开源操作系统。
一句话概括:鸿蒙 OS 是基于微内核的全场景分布式操作系统。
- 微内核:提升安全性、稳定性和可维护性。
- 全场景:可应用在各种各样的硬件设备上,不仅限于移动设备。
- 分布式:对于用户而言,多个运行鸿蒙OS的设备可以形成形成“超级虚拟终端”,进行资源、性能和数据的共享。
鸿蒙OS应用程序需要通过Java语言开发,其开发流程上与Android高度相似,但其底层架构与Android不同。
1.2 鸿蒙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界面、类库、资源等。
详情可参考官方说明:
3.2 Ability的概念和分类
Ability是鸿蒙OS应用程序开发的核心。相当于Android中的Activity,但是比Activity的功能更为强大,不仅可以提供UI界面,也可以提供服务和数据接口。
Ability包含了FA和PA两类,PA又包括了Service Ability和Data Ability两类,如下图所示。
Ability包含1个或者多个AbilitySlice。AbilitySlice是指应用的单个页面及其控制逻辑的总和。AbilitySlice页面提供的业务能力应具有高度相关性。
详情可参考官方说明:
3.3 Ability的生命周期
- onStart() :创建 Ability 时触发,仅触发 1 次。
- onActive() :进入前台时触发。
- onForeground() :可见时触发。
- onBackground() :不可见时触发。
- onInActive() :失去交点时触发。
- onStop() :销毁 Ability 时触发,仅触发 1 次。
具体可参见官方说明:
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();
详情可参考官方说明:
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://blog.csdn.net/dongyu1009/article/details/108697116