你是不是也在想——“鸿蒙这么火,我能不能学会?”
答案是:当然可以!
这个专栏专为零基础小白设计,不需要编程基础,也不需要懂原理、背术语。我们会用最通俗易懂的语言、最贴近生活的案例,手把手带你从安装开发工具开始,一步步学会开发自己的鸿蒙应用。
不管你是学生、上班族、打算转行,还是单纯对技术感兴趣,只要你愿意花一点时间,就能在这里搞懂鸿蒙开发,并做出属于自己的App!
📌 关注本专栏《零基础学鸿蒙开发》,一起变强!
每一节内容我都会持续更新,配图+代码+解释全都有,欢迎点个关注,不走丢,我是小白酷爱学习,我们一起上路 🚀
全文目录:
前言
在鸿蒙操作系统(HarmonyOS)中,应用的 UI 主要由 Ability 和 AbilitySlice 组成。Ability 是一个大功能单元,而 AbilitySlice 则是一个小功能单元,类似于传统 Android 中的 Activity。通过 AbilitySlice,开发者可以实现应用内的页面跳转、参数传递、状态管理等功能。
本篇将深入探讨如何通过 AbilitySlice 管理多页面跳转与状态传递,涵盖以下几个方面:
- Ability 与 AbilitySlice 之间的关系
- 页面跳转参数传递与接收方式
- 页面回退堆栈管理
- 多页面通信的推荐模式(EventBus/DataService)
1. Ability 与 AbilitySlice 之间的关系
1.1 Ability 与 AbilitySlice 的区别
-
Ability 是鸿蒙应用的基本功能单元,每个应用至少有一个 Ability。一个 Ability 通常包含多个 AbilitySlice,每个 AbilitySlice 负责一个具体的界面或功能。它类似于传统 Android 中的 Activity,但在鸿蒙中,多个 AbilitySlice 可以共同构成一个 Ability,并且能够在同一个 Ability 中进行切换。
-
AbilitySlice 是 Ability 中的一个界面部分,它定义了具体的用户界面和交互行为。在开发过程中,AbilitySlice 更像是传统 Android 中的 Fragment,用来展示和管理视图,处理用户交互。
1.2 Ability 与 AbilitySlice 之间的关系
在鸿蒙系统中,AbilitySlice 依赖于 Ability,但 Ability 中可以包含多个 AbilitySlice。每个 Ability 都可以拥有一个或多个 AbilitySlice,这些 AbilitySlice 通过 AbilitySliceManager 来管理,并且可以通过 AbilitySlice 之间的跳转来实现页面之间的切换。
2. 页面跳转参数传递与接收方式
2.1 页面跳转的基础方式
在 AbilitySlice 之间跳转的最基本方式是通过 Intent 来传递参数。Intent 可以携带数据(如基本数据类型、对象、URI 等),并将数据传递给目标页面的 AbilitySlice。
示例:从页面 A 跳转到页面 B,并传递参数
import { AbilitySlice, Intent, Text } from '@ohos.ability';
import { Button, Container } from '@ohos.ui';
class PageA extends AbilitySlice {
onCreate() {
const container = new Container();
const button = new Button();
button.text = "Go to Page B";
// 页面 A 中的按钮点击事件,跳转到页面 B
button.onClick = () => {
const intent = new Intent();
intent.setParam('message', 'Hello from Page A');
this.context.startAbility(intent, PageB);
};
container.add(button);
this.setUIContent(container);
}
}
class PageB extends AbilitySlice {
onCreate() {
const message = this.sliceParams.get('message'); // 获取传递的参数
const container = new Container();
const text = new Text();
text.text = message ? message : 'No message received';
container.add(text);
this.setUIContent(container);
}
}
在这个例子中:
- PageA 中通过
Intent携带参数message跳转到 PageB。 - 在 PageB 中,使用
sliceParams.get('message')获取传递的参数并显示。
2.2 页面跳转的高级方式(Bundle)
如果需要传递较复杂的数据,除了使用 Intent,我们还可以使用 Bundle 对象来传递多个数据项。
示例:使用 Bundle 传递复杂数据
import { AbilitySlice, Intent, Bundle, Text } from '@ohos.ability';
class PageA extends AbilitySlice {
onCreate() {
const intent = new Intent();
const bundle = new Bundle();
bundle.putString('name', 'John');
bundle.putInt('age', 30);
intent.setParam('data', bundle);
this.context.startAbility(intent, PageB);
}
}
class PageB extends AbilitySlice {
onCreate() {
const bundle = this.sliceParams.get('data');
const name = bundle.getString('name');
const age = bundle.getInt('age');
const text = new Text();
text.text = `Name: ${name}, Age: ${age}`;
this.setUIContent(text);
}
}
在这个例子中,我们通过 Bundle 来传递多个数据项(如字符串和整数)。在目标页面中,通过 bundle.getString() 和 bundle.getInt() 方法获取数据。
3. 页面回退堆栈管理
3.1 回退堆栈的管理
鸿蒙系统中的 AbilitySlice 支持回退操作。当用户点击返回按钮或通过其他方式退出当前页面时,AbilitySlice 会根据页面跳转的堆栈情况,自动执行回退操作。
-
默认行为:当一个 AbilitySlice 被创建并启动时,它会被添加到回退堆栈。当用户按下返回键时,当前的 AbilitySlice 会被销毁,回退到前一个 AbilitySlice。
-
自定义堆栈管理:通过
AbilitySliceManager,开发者可以管理堆栈,决定是否允许回退或者跳转到特定的页面。
示例:自定义页面跳转和回退
import { AbilitySlice, Intent, Text, Button, Container } from '@ohos.ability';
class PageA extends AbilitySlice {
onCreate() {
const container = new Container();
const button = new Button();
button.text = 'Go to Page B';
button.onClick = () => {
this.context.startAbility(new Intent(), PageB);
};
container.add(button);
this.setUIContent(container);
}
}
class PageB extends AbilitySlice {
onCreate() {
const container = new Container();
const button = new Button();
button.text = 'Back to Page A';
button.onClick = () => {
this.context.terminateAbility(); // 终止当前页面并回退到前一个页面
};
container.add(button);
this.setUIContent(container);
}
}
在这个例子中,PageB 页面中通过 terminateAbility() 方法来回退到前一个页面(PageA)。
4. 多页面通信的推荐模式(EventBus/DataService)
在多页面应用中,不同页面之间需要交换数据和事件。常见的解决方案包括 EventBus 和 DataService 模式。
4.1 EventBus 模式
EventBus 是一种常见的事件驱动架构,适用于组件之间的消息通信。当某个页面需要向其他页面发送消息时,可以通过 EventBus 发布事件,其他页面订阅事件并做出响应。
示例:使用 EventBus 实现页面间通信
import { EventBus } from '@ohos.event';
class PageA extends AbilitySlice {
onCreate() {
const button = new Button();
button.text = 'Send Message to Page B';
button.onClick = () => {
EventBus.publish('messageEvent', 'Hello from Page A');
};
this.setUIContent(button);
}
}
class PageB extends AbilitySlice {
onCreate() {
EventBus.subscribe('messageEvent', (message) => {
console.log('Received message in Page B: ', message);
});
const text = new Text();
text.text = 'Waiting for message...';
this.setUIContent(text);
}
}
在这个例子中,PageA 发布一个事件,PageB 订阅并接收该事件。当事件发生时,PageB 会接收到消息。
4.2 DataService 模式
DataService 允许在多个 AbilitySlice 之间共享数据,它是一种服务型的数据共享方式。应用的各个部分可以通过 DataService 提供的 API 来访问和修改共享的数据。
示例:使用 DataService 共享数据
import { DataService } from '@ohos.data';
class SharedDataService extends DataService {
constructor() {
super();
this.data = { message: 'Hello from DataService' };
}
getData() {
return this.data;
}
setData(message: string) {
this.data.message = message;
}
}
class PageA extends AbilitySlice {
onCreate() {
const button = new Button();
button.text = 'Change Message in DataService';
button.onClick = () => {
const dataService = new SharedDataService();
dataService.setData('Updated Message');
};
this.setUIContent(button);
}
}
class PageB extends AbilitySlice {
onCreate() {
const dataService = new SharedDataService();
const message = dataService.getData().message;
const text = new Text();
text.text = `Message from DataService: ${message}`;
this.setUIContent(text);
}
}
在这个例子中,PageA 修改 DataService 中的数据,而 PageB 读取共享的数据。通过 DataService,不同页面之间的数据可以共享和更新。
5. 总结
通过 AbilitySlice,鸿蒙操作系统提供了高效的页面跳转和状态传递机制。开发者可以灵活地管理多页面的跳转、数据传递和页面回退堆栈。常用的技术和模式包括:
- 页面跳转与参数传递:通过
Intent和Bundle传递数据,实现页面间的通信。 - 页面回退堆栈管理:通过
AbilitySliceManager管理堆栈,控制页面跳转和回退。 - 多页面通信模式:使用 EventBus 和 DataService 模式,在多个页面间实现数据和事件的共享。
这些机制帮助开发者在鸿蒙操作系统中开发跨页面、跨功能模块的复杂应用,提高了代码的可维护性和用户体验。
❤️ 如果本文帮到了你…
- 请点个赞,让我知道你还在坚持阅读技术长文!
- 请收藏本文,因为你以后一定还会用上!
- 如果你在学习过程中遇到bug,请留言,我帮你踩坑!
9440

被折叠的 条评论
为什么被折叠?



