赞
踩
本篇文章深度探讨HarmonyOS应用开发的核心要素——Ability。我们首先阐述Ability的基本概念及其分类,包括Page Ability和AbilitySlice。通过具体的开发案例,解析Ability的实践应用和涉及的关键知识点。
接着,我们详细解析Page Ability和AbilitySlice的页面生命周期,从各个状态、回调方法示意图到每个回调方法的详解,如onStart()、onActive()等,帮助读者全面理解页面的生命周期管理。此外,我们还将介绍页面路由的配置,以及通过实例演示页面间的互相跳转和导航,包括同一Page内和不同Page间的导航方式。
在探讨Intent部分,我们将解释其概述,并指导如何使用Intent启动应用,以实现功能间的通信和交互。
进一步,我们深入 Particle Ability,分类介绍Service Ability和Data Ability。对于Service Ability,我们将详解启动服务、连接服务和停止服务的过程;而对于Data Ability,我们将探讨跨设备场景和本地场景的应用。
通过这篇详尽的指南,读者将能够掌握HarmonyOS Ability开发的核心技术,为构建高效、稳定的鸿蒙应用打下坚实基础。最后,我们提供思考题供读者检验理解和深化学习。
Ability是应用所具备能力的抽象,也是应用程序的重要组成部分。一个应用可以具备多种能力(即可以包含多个Ability),HarmonyOS支持应用以Ability为单位进行部署。Ability可以分为FA (Feature Ability) 和PA (Particle Ability) 两种类型,每种类型为开发者提供了不同的模板,以便实现不同的业务功能。
Ability可以分为Feature Ability(简称FA)和Particle Ability(简称PA)两种类型。
在“小鸿网课”应用中,需要实现这样的需求:单设备播放教学视频并能答题,切换到多设备协同模式时,使用大屏设备播放教学视频,使用手持设备答题。
这一需求可以通过使用PageAbility、AbilitySlice和Intent实现。PageAbility和AbilitySlice用于构建页面,Intent用于实现页面跨设备唤起。该需求的流程图如下:
当用户进入、浏览、退出页面时,页面将有不同的状态,并回调不同的生命周期状态方法给外界。
Page Ability和AbilitySlice具有相似的生命周期回调方法,如下图所示:
使用present()或presentForResult()方法实现同一Page内两个AbilitySlice间的跳转。
如下代码片段展示通过点击按钮导航到其他AbilitySlice的方法:
Button button = ...;
button.setClickedListener(listener -> present(new TargetSlice(), new Intent()));
如下代码片段实现跳转时,从导航目标AbilitySlice返回后,系统将回调onResult()来接收和处理返回结果,代码示例如下:
Button button = ...;
button.setClickedListener(listener -> presentForResult(new TargetSlice(), new Intent(), 0));
通过配置Intent的Action,并使用startAbility()或startAbilityForResult()方法导航到目标Ability。获得返回结果的回调为onAbilityResult(),在Ability中调用setResult()可以设置返回结果。
// 创建意图 Intent intent = new Intent(); // 设置意图参数 intent.setParam(CommonData.KEY_REMOTE_DEVICEID, localDeviceId); // 创建操作对象 Operation operation = new Intent.OperationBuilder() .withDeviceId(deviceId) .withBundleName(getBundleName()) .withAbilityName(CommonData.ABILITY_MAIN) .withAction(CommonData.DRAW_PAGE) .withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE) .build(); // 设置操作 intent.setOperation(operation); // 执行意图,实现页面跳转 startAbility(intent);
通过构造包含BundleName与AbilityName的Operation对象,可以启动一个Ability,并导航到该Ability。示例代码如下:
Intent intent = new Intent();
// 通过Intent中的OperationBuilder类构造operation对象
// 指定设备标识(空串表示当前设备)、应用包名、Ability名称
Operation operation = new Intent.OperationBuilder()
.withDeviceId("")
.withBundleName("com.demoapp")
.withAbilityName("com.demoapp.FooAbility")
.build();
// 把operation设置到intent中
intent.setOperation(operation);
startAbility(intent);
主要用于后台运行任务(如执行音乐播放、文件下载等),但不提供用户交互界面。具有如下特性:
使用Data模板的Ability(以下简称 “Data”)对外提供对数据的增、删、改、查,以及打开文件等接口。Data提供的接口的具体实现由开发者提供。
调用Service方法的不同,其生命周期有以下两种路径:启动服务和连接服务。
DeviceId
、BundleName
与AbilityName
的Operation
对象来设置目标Service信息。这三个参数的含义如下:DeviceId
:表示设备ID。如果是本地设备,则可以直接留空;如果是远程设备,可以通过 ohos.distributedschedule.interwork.DeviceManager提供的getDeviceList获取设备列表。BundleName
:表示包名称。AbilityName
:表示待启动的Ability名称。onAbilityConnectDone()
用来处理连接的回调;onAbilityDisconnectDone()
用来处理断开连接的回调。Service
中通过terminateAbility()
停止本Service;Ability
调用stopAbility()
来停止Service。Data的提供方和使用方都通过URI (Uniform Resource Identifier)来标识一个具体的数据。
(判断题) Service可由其他应用或Ability启动,即使用户切换到其他应用,Service仍将在后台继续运行。 ( )
A. 正确
B. 错误
(多选题) HarmonyOS中,Ability可以分为( )和( ),以便实现不同的业务功能。
A. BroadCast Ability
B. Feature Ability
C. Particle Ability
D. Content Ability
(多选题) 以下哪些是PageAbility的生命周期回调方法?( )
A. onStart()
B. onActive()
C. onInactive()
D. onBackground()
E. onStop()
F. onForeground()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。