第5章_图解harmonyos Ability基础知识

发布时间:2026/7/23 4:44:40
第5章_图解harmonyos Ability基础知识 第5章 图解harmonyos Ability 基础知识HarmonyOS 学习系统 | 阶段二进阶实战期建议学习时长2-3 周学习目标序号能力1深入理解 FA(Feature Ability) 和 PA(Particle Ability) 的区别与使用场景2掌握 Page Ability 完整生命周期及各回调的触发时机3理解 Intent 机制能实现同 Page 和跨 Page 导航4了解 Service Ability 和 Data Ability 的基本用法核心图解内容讲解5.1 FA 与 PA 概述如果把一个 HarmonyOS 应用比作一家公司那么 Ability 就是公司里的不同部门FAFeature Ability 前台部门销售部、客服部——直接跟客户用户打交道有店面UI 界面PAParticle Ability 后台部门仓库部、财务部——在幕后默默工作不跟客户直接接触没有店面无 UIPage Ability 销售部里的一个柜台——每个柜台AbilitySlice展示不同的商品Service Ability 仓库部——后台持续运行比如音乐播放、文件下载Data Ability 档案室——对外提供数据查询服务其他部门可以来借阅资料Intent 部门间的调动函——告诉你去哪个部门、找谁、带什么资料Ability 是 HarmonyOS 应用所具备能力的抽象。一个应用可以包含多个 Ability每个 Ability 实现特定的业务功能。Ability 主要分为 FA 和 PA 两大类。类型全称子类型说明典型场景FAFeature AbilityPage Ability有 UI 界面用于与用户交互商品列表、详情页、登录页PAParticle AbilityService Ability无 UI后台运行任务音乐播放、文件下载、数据同步PAParticle AbilityData Ability无 UI提供数据访问抽象数据库操作、文件读写、共享数据5.2 Page Ability 详解Page 与 AbilitySlice 的关系一个 Page即 Page Ability可以包含一个或多个 AbilitySlice。AbilitySlice 是应用的单个页面及其控制逻辑的总和。当一个 Page 由多个 AbilitySlice 构成时这些 AbilitySlice 提供的业务能力应具有高度相关性。路由配置Page 进入前台时默认只能展示一个 AbilitySlice通过以下方式配置publicclassMainAbilityextendsAbility{OverridepublicvoidonStart(Intentintent){super.onStart(intent);// 设置默认展示的 AbilitySlicesuper.setMainRoute(MainAbilitySlice.class.getName());// 添加附加路由可选addActionRoute(action.pay,PayAbilitySlice.class.getName());}}5.3 Page Ability 生命周期Page 的生命周期包含以下状态和回调回调方法触发时机调用次数典型操作onStart()Page 首次创建仅一次setMainRoute(), 初始化数据onActive()Page 进入前台可交互多次恢复动画、刷新数据onInactive()Page 失去焦点多次暂停动画、保存状态onBackground()Page 进入后台不可见多次释放资源、停止定时器onForeground()Page 从后台回前台多次重新加载数据onStop()Page 被销毁仅一次释放所有资源状态转换流程UNINITIALIZED → onStart() → INITIAL → onActive() → INACTIVE → onActive() → ACTIVE ↓ ACTIVE → onInactive() → INACTIVE → onBackground() → BACKGROUND → onForeground() → INACTIVE → onActive() → ACTIVE INITIAL → onStop() → DESTROYED关键区别onStart()仅在 Page 首次创建时调用一次而onActive()每次从后台回到前台都会调用。数据初始化应放在onStart()中UI 刷新放在onActive()中。AbilitySlice 生命周期AbilitySlice 生命周期回调与 Page 类似但有以下区别onStart()中必须调用setUIContent()加载布局同一 Page 内的 AbilitySlice 导航使用present()/presentForResult()返回上一个 AbilitySlice 使用terminate()5.4 Service AbilityService Ability 用于提供后台运行任务的能力没有 UI 界面。其他 Ability 可以通过startAbility()或connectAbility()来启动或连接 Service Ability。启动方式// 启动 Service Ability一次性操作IntentserviceIntentnewIntent();OperationoperationnewIntent.OperationBuilder().withDeviceId().withBundleName(com.example.myapp).withAbilityName(MyServiceAbility).build();serviceIntent.setOperation(operation);startAbility(serviceIntent);连接方式获取远程代理对象// 连接 Service AbilityconnectAbility(serviceIntent,newIAbilityConnection(){OverridepublicvoidonAbilityConnectDone(ElementNameelementName,IRemoteObjectremoteObject){// 获取远程对象进行跨进程通信}OverridepublicvoidonAbilityDisconnectDone(ElementNameelementName){// 连接断开回调}});5.5 Intent 机制Intent 是 HarmonyOS 应用中不同 Ability 之间传递信息和执行操作的信使。它承载了要做什么和怎么做的信息。Intent 的核心组成IntentintentnewIntent();// 设置 Action动作标识intent.setAction(action.pay);// 设置 Entity附加信息intent.setEntity(entity.default);// 设置参数intent.setParam(amount,100);intent.setParam(orderId,20240101001);// 构建 Operation目标地址OperationoperationnewIntent.OperationBuilder().withDeviceId()// 设备ID空字符串表示本地.withBundleName(com.example.myapp)// 目标应用包名.withAbilityName(PayAbility)// 目标 Ability 名.withAction(action.pay)// 或通过 Action 匹配.build();intent.setOperation(operation);同 Page 内导航 vs 跨 Page 导航导航类型API条件返回结果同 Page 内present()/presentForResult()同一个 Page 下的 AbilitySliceonResult()回调跨 PagestartAbility()/startAbilityForResult()不同 Page 的 AbilityonAbilityResult()回调代码速查卡API功能示例setMainRoute()设置默认路由super.setMainRoute(MainAbilitySlice.class.getName())addActionRoute()添加附加路由addActionRoute(action.pay, PaySlice.class.getName())present()同 Page 导航present(new Intent(), Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)presentForResult()带返回结果导航presentForResult(intent, REQUEST_CODE)startAbility()启动其他 AbilitystartAbility(intent)startAbilityForResult()带返回结果启动startAbilityForResult(intent, REQUEST_CODE)connectAbility()连接 ServiceconnectAbility(intent, connection)terminate()关闭当前 AbilitySliceterminate()setResult()设置返回结果setResult(intent)与 Android/iOS 对比HarmonyOS PageAndroid ActivityiOS ViewControlleronStart()onCreate()viewDidLoad()onActive()onResume()viewWillAppear()onInactive()onPause()viewWillDisappear()onBackground()onStop()-onForeground()onRestart()-onStop()onDestroy()deinit / viewDidDisappearIntentIntentUIStoryboardSegueAbilitySliceFragmentChild ViewController⚠️ 踩坑回忆录第一次做页面跳转时我直接用present()试图跳到另一个 Page 的 AbilitySlice结果怎么都跳不过去。查了半天文档才明白present() 只能在同一个 Page 内的 AbilitySlice 之间导航。要跳到另一个 Page必须用startAbility()而且还需要在 Intent 中设置 Action 或指定 bundleName AbilityName。还有一个坑onStart()只在 Page 首次创建时调用一次而onActive()每次从后台回到前台都会调用。我一开始把数据初始化放在了onActive()里导致每次切回应用都会重新加载数据体验很差。后来把初始化挪到了onStart()onActive()只做 UI 刷新问题才解决。必做实操任务序号任务难度1创建包含两个 AbilitySlice 的应用实现同 Page 内导航★★☆2实现 Ability 生命周期回调在每个回调中打印日志并观察触发顺序★★☆3使用 Intent 传递数据到目标 AbilitySlice 并显示★★★4创建一个 Service Ability实现后台计时功能★★★5使用startAbilityForResult()实现页面间数据回传★★★学习检查清单能区分 FA 和 PA 的使用场景能说出 Page Ability 完整生命周期的 6 个状态和 6 个回调能使用 Intent 实现同 Page 和跨 Page 导航理解 onStart() 和 onActive() 的区别能说出 Service Ability 的两种启动方式start / connect能解释 ActionRoute 的配置方法了解 Data Ability 的基本概念和 URI 访问方式进阶方向学习 Data Ability 的 CRUD 操作实现了解跨进程通信IPC的原理实现一个完整的 Service Ability 音乐播放器