PS:学习B站全网首套鸿蒙HarmonyOS 2.0应用开发实战教程 的笔记
地址:B站全网首套鸿蒙HarmonyOS 2.0应用开发实战教程
移动应⽤开发:
文档概览-HarmonyOS应用开发官网
HarmonyOS有三⼤特征:
盘古开天辟地——⼀⽚混沌(鸿蒙时代) ⽴志要在⼿机系统的国产化道路上开天辟地
安卓:应⽤的运⾏是基于虚拟机的 (Java—JDK编译器—字节码—虚拟机—操作系统)
鸿蒙:⽅⾈编译器 (Java----⽅⾈编译器—机器码—操作系统)
据说, 鸿蒙系统运⾏效率相较于安卓提升了50%+
下载地址
华为操作系统DevEco Studio和SDK下载与升级 | HarmonyOS开发者
安装
运行DevEco Studio
第一次启动开发环境会下载鸿蒙开发所需要的SDK
注册_华为帐号 (huawei.com)
config.json 是鸿蒙应⽤的主配置⽂件
app 配置 :定义当前应⽤的唯⼀标识
module 配置: ⽤于声明当前应⽤的信息(包、主类、主界⾯、功能模块声明、适配设 备类型等等)
mainAbility声明当前应用启动时默认加载的Ability
deviceType声明当前应用适配的设备类型
abilities 声明当前应⽤中每个ability的配置信息
启动鸿蒙应⽤加载config.json⽂件,根据 mainAbility
配置加载启动应⽤的主界⾯
"mainAbility": "com.example.myapplication.demo01.MainAbility"
执⾏MainAbility的 onStart ⽅法
MainAbility是⼀个显示界⾯的容器,在onStart
⽅法中通过调⽤ setMainRoute ⽅法来指 定当前界⾯容器中显示的视图界⾯
// ability相当于一个容器(或者说是浏览器窗口), // 在容器里面通过填充一个视图slice(html中的body)来展示。 // MainAbilitySlice就是⼀个界⾯ super.setMainRoute(MainAbilitySlice.class.getName());
执⾏MainAbilitySlice中的 onStart
完成界⾯的渲染
slice是⼀个界⾯,界⾯中显示什么视图,就是通过onstart⽅法来加载渲染的
$string : 表示引用的一sing,表示要去string文件中寻找键值对,如图寻找key为:mainability_HelloWorld 的值。
Ability是应⽤所具备能⼒的抽象,也是应⽤程序的重要组成部分。⼀个应⽤可以具备多种能⼒
(即可以包含多个Ability),HarmonyOS⽀持应⽤以Ability为单位进⾏部署。
Ability可以分为FA(Feature Ability)
和PA (Particle Ability)
两种类型,每种类型为
开发者提供了不同的模板,以便实现不同的业务功能。
FA⽀持Page Ability:
Page模板是FA唯⼀⽀持的模板,⽤于提供与⽤户交互的能⼒。⼀个Page实例可以包含⼀组相关⻚⾯,每个⻚⾯⽤⼀个AbilitySlice实例表示。
PA⽀持Service Ability和Data Ability:
⼀个PageAbility相当于⼀个⻚⾯的容器(浏览器窗⼝),⼀个AbilitySlice相当于显示在容器
中的⼀个⻚⾯(HTML)
Page模板(以下简称“Page”)是FA唯⼀⽀持的模板,⽤于提供与⽤户交互的能⼒。
⼀个Page可以由⼀个或多个AbilitySlice构成,AbilitySlice是指应⽤的单个⻚⾯及其控制逻辑的总和(相当于⼀个HTML⽂件)。在⼀个Abiliy种可以包含多个Slice
商品管理: ProductAbility(PageAbility): goods-list.html ProductListSlice goods-detail.html ProductDetailSlice
AbilitySlice创建slice包中
创建步骤:
创建⼀个类继承 ohos.aafwk.ability.AbilitySlice 类
public class MainAbilitySlice2 extends AbilitySlice { }
在 resources/base/layout
⽬录下创建布局⽂件
<?xml version="1.0" encoding="utf-8"?> <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:orientation="vertical"> <Text ohos:height="match_content" ohos:width="match_content" ohos:text="这是测试⽂本" ohos:text_color="#ff0000" ohos:text_size="40vp"></Text> </DirectionalLayout>
在创建的 AbilitySlice 类中重写 onStart ⽅法,调⽤setUIContent⽅法加载布局⽂件
通过 ResourceTable 加载resouces⽬录下的资源
public class MainAbilitySlice2 extends AbilitySlice { @Override protected void onStart(Intent intent) { super.onStart(intent); //定义slice视图组件(Java,XML) //setUIContent(int); 加载应⽤的 布局⽂件(xml) 作为当前slice的视图 setUIContent(ResourceTable.Layout_ability_main_slice2); } }
⼀个Page中可以包含多个Slice,但是只能同时显示⼀个slice,如何设置PageAbility默认
显示的slice?
在⼀个Page Ability中提供了多个声明周期⽅法,这些⽅法在当前PageAbility加载的不同
阶段会⾃定调⽤
说明
INACTIVE状态是一种短暂存在的状态,可理解为“激活中”。
public class MainAbility extends Ability { /** * 当系统⾸次创建当前PageAbility实例时,⾃动调⽤onstart⽅法。也就是说对于⼀个Page⽽⾔,onStart⽅法只会执⾏⼀次 */ public void onStart(Intent intent) { super.onStart(intent); super.setMainRoute(MainAbilitySlice2.class.getName()); System.out.println("--------------onStart"); } /** * 当前Page进⼊active状态进⼊到⼿机前台获取焦点时,会触发onActive⽅法的执⾏ */ protected void onActive() { super.onActive(); System.out.println("--------------onActive"); } /** * 当前PageAbility失去焦点(⻚⾯切⼊到后台、切换到其他Page),触发onInactive⽅法的执⾏ */ protected void onInactive() { super.onInactive(); System.out.println("--------------onInactive"); } /** * 当前PageAbility切换到后台,不可⻅时,触发onBackground执⾏ */ protected void onBackground() { super.onBackground(); System.out.println("--------------onBackground"); } /** * 当PageAbility从后台不可⻅状态(⻚⾯在后台、但是没销毁)切换到前台可⻅状态时触发 onForeground执⾏ */ protected void onForeground(Intent intent) { super.onForeground(intent); System.out.println("--------------onForeground"); } /** * 当前Page销毁时,触发onStop的执⾏ */ protected void onStop() { super.onStop(); System.out.println("--------------onStop"); } }