鸿蒙开发学习笔记 #3
学习时间: 2026-03-14 01:15
主题: Ability 生命周期与页面路由
---
1. Ability 概述
1.1 什么是 Ability?
Ability (能力) 是鸿蒙应用的基本组成单元,相当于 Android 的 Activity 或 iOS 的 ViewController。
1.2 Ability 类型
|------|------|----------|
---
2. PageAbility 生命周期
2.1 生命周期状态
┌─────────────────────────────────────────┐
│ 应用启动 │
└─────────────────┬───────────────────────┘
▼
┌─────────────────────────────────────────┐
│ onCreate() │ ← 创建
│ 初始化数据、资源加载 │
└─────────────────┬───────────────────────┘
▼
┌─────────────────────────────────────────┐
│ onForeground() │ ← 可见
│ 页面可见、获取焦点 │
└─────────────────┬───────────────────────┘
▼
┌─────────────────────────────────────────┐
│ onBackground() │ ← 不可见
│ 页面不可见、释放资源 │
└─────────────────┬───────────────────────┘
▼
┌─────────────────────────────────────────┐
│ onDestroy() │ ← 销毁
│ 释放所有资源 │
└─────────────────────────────────────────┘
2.2 代码示例
// entry/src/main/ets/entryability/EntryAbility.ets
import UIAbility from '@ohos.app.ability.UIAbility';
import window from '@ohos.window';
export default class EntryAbility extends UIAbility {
// 创建时调用
onCreate(want, launchParam) {
console.log('EntryAbility onCreate');
// 初始化应用数据
}
// 销毁时调用
onDestroy() {
console.log('EntryAbility onDestroy');
// 释放资源
}
// 切换到前台
onForeground() {
console.log('EntryAbility onForeground');
// 恢复动画、刷新数据
}
// 切换到后台
onBackground() {
console.log('EntryAbility onBackground');
// 暂停动画、保存状态
}
// 窗口创建完成
onWindowStageCreate(windowStage: window.WindowStage) {
console.log('EntryAbility onWindowStageCreate');
// 加载首页
windowStage.loadContent('pages/Index');
}
// 窗口销毁
onWindowStageDestroy() {
console.log('EntryAbility onWindowStageDestroy');
}
}
---
3. 页面路由
3.1 基础路由 (router)
import router from '@ohos.router';
// 跳转到下一页
router.pushUrl({
url: 'pages/SecondPage',
params: {
data: '传递的数据'
}
})
// 替换当前页 (不留返回)
router.replaceUrl({
url: 'pages/SecondPage'
})
// 返回上一页
router.back()
// 带参数返回
router.back({
url: 'pages/Index',
params: {
result: '返回结果'
}
})
3.2 接收路由参数
// pages/SecondPage.ets
import router from '@ohos.router';
@Entry
@Component
struct SecondPage {
// 接收参数
onPageShow() {
const params = router.getParams() as Record
console.log('接收到的数据:', params['data'])
}
build() {
Column() {
Text('第二页')
.fontSize(30)
Button('返回')
.onClick(() => {
router.back()
})
}
}
}
3.3 命名路由
// 在 module.json5 中配置
{
"module": {
"router": [
{
"name": "HomePage",
"pageSourceFile": "pages/HomePage",
"components": {
"HomePage": "pages/HomePage"
}
}
]
}
}
// 使用命名路由
router.pushNamedRoute({
name: 'HomePage'
})
---
4. 路由拦截与权限
4.1 路由拦截示例
// 在 EntryAbility 中设置拦截
import router from '@ohos.router';
onWindowStageCreate(windowStage: window.WindowStage) {
// 设置路由拦截
router.setInterceptor((toRouterInfo) => {
const targetUrl = toRouterInfo.url
// 检查登录状态
if (targetUrl.includes('profile') && !isLoggedIn()) {
// 重定向到登录页
return {
url: 'pages/Login',
params: { redirect: targetUrl }
}
}
return toRouterInfo // 放行
})
windowStage.loadContent('pages/Index');
}
---
📝 今日学习总结
🔜 下节预告
数据存储与网络通信
---
笔记持续更新中...