【Day 25】鸿蒙HarmonyOS中 Ability开发实战

HarmonyOS 第2章 Ability的开发,鸿蒙HarmonyOS 应用开发入门 例如,用户在应用中重复打开同一个文档时,启动的均是最近任务列表中的同一个任务,以及在应用中重复新建文档时,启动的均是最近任务列表中的新任务。在单实例模式下,如果目标页面在页面栈中已经存在同URL的页面,离栈顶最近的同RUL的页面会被移动到栈顶,替换当前页面,并销毁被替换的当前页面,移动后的页面为新建页,页面栈数量会减1;在单实例模式下,如果目标页面在页面栈中已经存在同URL的页面,离栈顶最近的同URL的页面会被移动到栈顶,移动后的页面为新建页,原来的页面仍然保存在栈中,页面栈数量不变; 阅读详情
本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新
1. Page Ability开发入门:生命周期与基础用法

① 生命周期详解

// Page Ability生命周期示例
export default class MainPage extends Ability {
  onInit() { console.log('初始化资源'); }  // 适合初始化变量
  onReady() { console.log('UI首次渲染完成'); } // 可操作DOM
  onShow() { console.log('页面可见'); }     // 恢复动画/数据加载
  onHide() { console.log('页面隐藏'); }     // 暂停耗时操作
  onDestroy() { console.log('释放资源'); }  // 清理定时器/监听
}

关键差异:

  • 对比Android Activity:onReady在UI布局完成后触发,精准控制渲染时机 。
  • 多实例模式:
    • Standard(默认):每次启动新实例(如商品详情页)
    • Singleton:全局单例(如音乐播放页)

② 基础页面跳转(显式跳转传参)

        发送方(AbilityA) 通过startAbility的parameters字段传递参数:

// 跳转到另一个Page Ability
featureAbility.startAbility({
  want: {
    bundleName: 'com.example.app',
    abilityName: 'TargetAbility',
    parameters: { 
      id: 123, 
      message: 'Hello from AbilityA' 
    }
  }
});

接收方(TargetAbility) 在目标Ability的onCreate或onNewWant中获取参数:

export default class TargetAbility extends Ability {
  onCreate(want: Want) {
    const receivedId = want.parameters?.id; // 获取参数
    const receivedMsg = want.parameters?.message;
    console.log(`收到参数:id=${receivedId}, msg=${receivedMsg}`);
  }
}

关键点:

  • 参数通过want.parameters对象获取,需判空处理 。
  • 若Ability已存在(非首次创建),需在onNewWant中处理新参数 。
2. 带返回值的跳转(startAbilityForResult)

发送方(AbilityA) 使用startAbilityForResult并处理返回值:

const context = getContext(this) as common.UIAbilityContext;
context.startAbilityForResult({
  bundleName: 'com.example.app',
  abilityName: 'TargetAbility',
  parameters: { requestCode: 1 }
}).then((result) => {
  if (result.want?.parameters?.response) {
    console.log(`返回结果:${result.want.parameters.response}`);
  }
});

接收方(TargetAbility) 通过terminateSelfWithResult返回数据:

const context = getContext(this) as common.UIAbilityContext;
context.terminateSelfWithResult({
  resultCode: 0,
  want: {
    parameters: { response: 'Processed successfully' }
  }
});

适用场景:订单支付、权限申请等需回调的场景

3. 隐式跳转参数获取

隐式跳转通过action和entities匹配目标Ability,参数获取方式与显式相同:

// 发送方
featureAbility.startAbility({
  want: {
    action: 'ohos.action.view',
    entities: ['entity.system.browser'],
    parameters: { url: 'https://example.com' }
  }
});

// 接收方(需在config.json中声明匹配规则)
export default class BrowserAbility extends Ability {
  onCreate(want: Want) {
    const url = want.parameters?.url; // 获取URL参数
  }
}

注意:需在config.json中声明skills匹配规则 

4. Service Ability进阶:后台任务与跨进程通信

① 后台服务开发

// 文件下载服务示例
export default class DownloadService extends Ability {
  private tasks: Map<string, DownloadTask> = new Map();

  onCommand(want) {
    const url = want.parameters.url;
    this.tasks.set(url, new DownloadTask(url).start());
    return new DownloadStub(); // 返回通信接口
  }
}

优化技巧:

  • 使用Worker线程避免主线程阻塞 
  • 通过want参数区分任务类型(下载/上传)

② IPC通信实战

// 客户端调用Service
const proxy = await featureAbility.connectAbility({
  bundleName: 'com.example',
  abilityName: 'DownloadService'
});
proxy.send({ url: 'https://example.com/file.zip' });
3. Ability间通信机制深度解析

通信方式对比:

方式适用场景代码示例延迟(1KB数据)
Want简单参数传递startAbility({ parameters })0.2ms
DataShare大数据共享dataAbilityHelper.insert()2ms
EventBus组件间事件通知emit('event', data)0.5ms

备注:

  • 敏感数据需声明ohos.permission.INTERNET权限 

鸿蒙应用开发培训笔记03:Ability 设计与开发 通过这篇详尽的指南,读者将能够掌握HarmonyOS Ability开发的核心技术,为构建高效、稳定的鸿蒙应用打下坚实基础。最后,我们提供思考题供读者检验理解和深化学习。 阅读详情

相关推荐

量子计算入门指南:密度算符的核心概念与应用解析

本文深入解析了量子计算中密度算符的核心概念与应用。作为描述量子系统“状态的状态”的关键数学工具,密度算符能有效处理混合态与子系统描述,是理解量子噪声、量子纠错和开放系统演化的基石。文章通过对比纯态与混合态,阐释了密度矩阵的数学定义与物理意义,并结合代码示例演示了其在实际量子计算问题中的强大威力。

day7的博客 461

鸿蒙Ability开发-Stage模型下Ability的创建和使用

在购物应用中,我们点击首页商品列表中的某一项商品,即可跳转到商品的详情页面。此时我们点击商品列表中的商品,系统会打开商品详情页,承载商品列表视图的EntryAbility将返回到后台,系统会执行EntryAbility的onBackground()方法,我们在DevEco Studio的控制台中可以观察相关生命周期函数的变换情况。UIAbilityContext模块提供允许访问特定Ability的资源的能力,包括对Ability的启动、停止的设置、获取caller通信接口、拉起弹窗请求用户授权等。

鸿蒙的技术博客 2057

Polyworks脚本开发学习笔记(十五)-用Python连接Polyworks的COM组件

Polyworks脚本开发学习笔记(十五)-利用Python连接Polyworks的COM组件

qq_43662503的博客 2489

鸿蒙OSPage生命周期对比Web前端解析

主文章跳转按钮 onStart() 这个相当于vue 的create 当系统首次创建Page实例时,触发该回调。对于一个Page实例,该回调在其生命周期过程中仅触发一次,Page在该逻辑后将进入INACTIVE状态。开发者必须重写该方法,并在此配置默认展示的AbilitySlice。 onActive() 相当于vue mounted Page会在进入INACTIVE状态后来到前台,然后系统调用此回调。Page在此之后进入ACTIVE状态,该状态是应用与用户交互的状态。Page将保持在此状态,

BLUESKYHOST的博客 1841

Unity WebGL发布避坑指南:从内存设置到字体打包,一次搞定所有常见问题

本文详细解析Unity WebGL发布的完整流程,从内存设置到字体打包,提供全面的避坑指南。涵盖关键检查清单、内存与性能优化配置、资源处理专项优化及平台适配技巧,帮助开发者高效解决常见问题,确保项目顺利发布。

weixin_28693309的博客 144

Vue3结合vue-office实现Word文档上传与预览全流程解析

本文详细解析了如何在Vue3项目中集成vue-office插件实现Word文档上传与预览功能。从项目初始化、插件安装到文件上传处理(包括ArrayBuffer转换)、预览优化及常见问题解决方案,提供了一套完整的实现流程,帮助开发者快速实现高效的文档预览功能。

weixin_29001327的博客 462

第二章 Ability的开发

Ability翻译成中文就是“能力”的意思。在HarmonyOS中,Ability是应用所具备能力的抽象,也是应用程序的重要组成部分。FA(Feature Ability)模型是HarmonyOS早期版本(API 8及更早版本)开始支持的模型,目前已经不再主推。Stage模型是HarmonyOS 3.1版本开始新增的模型,也是目前HarmonyOS主推且会长期演进的模型。

笔触狂放的博客 2072

Qt实现仿微信在线聊天工具(服务器、客户端)V1_ 01

在主控类中绑定登录类的信号 void signalLoginOK() ,跳过验证步骤,先实现页面的跳转MyChatToolClient.h文件//登录成功槽函数 private :MyChatToolClient.cpp文件} //登录成功槽函数 void MyChatToolClient :: slotLoginOk() {//关闭登录窗口并释放空间 m_loginWin -> close();//新建并打开聊天窗口 m_chatWin = new ChatWindow;

Leo的博客 1866

鸿蒙三方库生态深度分析:现状、缺口与移植指南

鸿蒙三方库生态现状与移植指南 摘要 鸿蒙操作系统(HarmonyOS)的OHPM生态相比主流包管理系统(如npm、Maven、PyPI)仍存在显著差距,但这也为开发者提供了巨大机会。本文分析了鸿蒙三方库生态现状:当前覆盖较完善的领域包括网络通信、状态管理和日期处理,但图表可视化、地图SDK和AI/ML库等领域存在严重短缺。 文章详细介绍了将开源库移植到鸿蒙的实用方法,包括四步移植流程和常见API替换对照表,并以dayjs日期库为例展示了完整移植过程。针对希望贡献生态的开发者,文章指出了最值得投入的缺口领域,

2402_85554739的博客 1236

MOS五类漏电流与优化策略

分析了五种主要漏电流机制:1)反偏结泄漏,由PN结热激发和隧

硬核科技 434

ESP32学习笔记06-UART 的485 通讯模式

通信方式选择UART 控制器支持多种通信模式,使用函数 uart_set_mode() 可以选择模式。选择特定模式后,UART 驱动程序将处理已连接 UART 设备的相应行为。例如,主机开始向 Tx FIFO 缓冲区写入数据时,UART 驱动程序会自动置位 RTS 管脚(逻辑 1);最后一位数据传输完成后,驱动程序就会取消置位 RTS 管脚(逻辑 0)。要使用此模式,软件。

Car12 2470

在React Native鸿蒙跨平台开发中实现一个桶排序算法,基于HarmonyOS API 24 ,如何使用任何排序算法对每个桶中的元素进行排序,再将所有桶中的元素合并成一个有序数组

Python 3 终结了这一分歧,其开发者只能使用被称为新式类的模型。怎样,知道两种模型在 Python 2 中的工作原理仍是很重要的,因为这有助于你移植旧代码。定义好之后,注解可以通过函数对象的__annotations__属性获取,它是一个字典,分重点介绍了与 Python 序列和集合相关的语法特性,也讨论了字符串和字节相关的序列。这也是为什么本章包含关于 Python 2 旧特性的大量内容,尽管本书针对的是最新版的。自定义函数使用的类型的完全可选的元信息,但事实上,它并不局限于类型提示,而且在。

2301_77888392的博客 364

【推荐100个unity插件】Unity URP(通用渲染管线)的基于物理的天地和预计算大气散射——UnityPhysicallyBasedSkyURP

本文介绍了Unity URP(通用渲染管线)中基于物理的天地和预计算大气散射的实现方法。该插件提供物理天空、大气散射、高度雾效、动态天空反射和环境光等功能,要求Unity 2022.3及以上版本,支持着色器模型3.5+。使用步骤包括:添加渲染器功能、配置Volume组件(天空、雾效等),并建议太阳强度设为3、曝光为0作为初始设置。插件已在GitHub和Gitee开源,附带详细配置截图和效果展示。文末推荐了多个Unity开发相关专栏,涵盖游戏开发全领域知识。作者向宇提供了博客链接,欢迎交流学习问题。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1215

在React Native鸿蒙跨平台开发中实现 二叉搜索树,如何实现一些基本的遍历方法,如中序遍历,基于HarmonyOS API 24 中序遍历按顺序访问左子树、根节点、右子树

Request 和Response 都使用了Fetch API 的Body 混入,以实现两者承担有效载荷的能力。可能会导致网络延迟,另一个原因是流API 本身在处理有效载荷方面是有优势的。Body 混入提供了5 个方法,用于将ReadableStream 转存到缓冲区的内存里,将缓冲区转换为某。示body 流是否已读)和一组方法,用于从流中读取内容并将结果转换为某种JavaScript 对象类型。通常,将Request 和Response 主体作为流来使用主要有两个原因。一个原因是有效载荷的大小。

wanmeijuhao的博客 290

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

基于HarmonyOS API 24 在React Native鸿蒙跨平台开发中实现一个冒泡排序算法并将其应用于数据排序,如何进行复制数组以避免直接修改状态中的数组

与XMLHttpRequest 一样,fetch()既可以发送数据也可以接收数据。使用init 对象参数,可。以配置fetch()在请求体中发送各种序列化的数据。

wanmeijuhao的博客 420

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

在React Native鸿蒙跨平台开发中实现一个选择排序算法,HarmonyOS ArkTS API 24 ,如何实现列表项重排序,如任务管理应用中调整任务的优先级

()方法是非常合理的。那就是下一节将介绍的元类。

2301_77888392的博客 407

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

在React Native鸿蒙跨平台开发中实现一个基数排序算法,基于HarmonyOS API 24,如何进行找到最大数:遍历数组找到最大值呢?

现在第一个位置参数的命名约定为 cls,说明它已经是一个创建好的类对象(元类的实例),而不是一个元类对象。name、bases 和 namespace 参数的含义与前面介绍的 type()调用中的参数相同,• bases:这是父类的列表,将成为__bases__属性,并用于构造新创建的类的 MRO。然是 type 类的子类(参见图 3-4),因为如果不是的话,这个类将在继承方面与其他的类。metaclass 参数的值通常是另一个类对象,但它可以是任意可调用对象,只要接受。定义了对象实例的类也是对象。

2301_77888392的博客 417

Day3 鸿蒙,用XML创建布局来开发是不是就简单一点

上文档: HarmonyOS提供了Ability和AbilitySlice两个基础类。有界面的Ability绑定了系统的Window进行UI展示,且具有生命周期。AbilitySlice主要用于承载Ability的具体逻辑实现和界面UI,是应用显示、运行和跳转的最小单元。AbilitySlice通过setUIContent()为界面设置布局。 组件需要进行组合,并添加到界面的布局中。在Java UI框架中,提供了两种编写布局的方式: 在代码中创建布局:用代码创建Component和ComponentCo..

程序员小小叶的博客 524

HarmonyOS定时任务开发:代理提醒的三种类型、系统托管与提醒管理器实战

摘要:在HarmonyOS的后台任务体系中,代理提醒(Agent Reminder)是唯一一种完全脱离应用进程、由系统独立托管执行的定时机制。无论是应用被用户手动杀死、系统资源不足强制回收,还是设备重启后尚未打开应用,代理提醒都能准时触发——这种"邮局式"的托管模型,使其成为闹钟、日历提醒、倒计时等场景的唯一正确选择。

从事移动开发八年,csdn博客专家,阿里云特邀专家,华为云云享专家,高级网络信息安全工程师,大数据工程师(高级),python技术开发(高级),HarmonyOS 应用开发者高级认证,现在某学校任教。 328

HarmonyOS 6 React Native鸿蒙跨平台采用了函数式组件的形式,通过 props 接收分类数据,使用 TouchableOpacity实现了点击交互效果

在React Native中开发鸿组件(这里指的是鸿蒙(HarmonyOS)组件),你需要了解鸿蒙开发的基础以及如何在React Native项目中集成鸿蒙应用。鸿蒙OS是由华为开发的一个分布式操作系统,主要用于其智能设备,如手机、平板、智能手表等。首先,你需要熟悉鸿蒙OS的开发环境设置和基本开发流程。React Native本身主要用于Harmony和Harmony平台的开发,但你可以通过以下几种方式将鸿蒙应用集成到React Native项目中:A. 使用WebView。

czhm57的博客 2077

HarmonyOS 6.1 实战:Column/Row + layoutWeight实现弹性权重分配、条件渲染弹窗、Scroll 滚动容器

本文基于HarmonyOS NEXT和ArkTS框架,设计实现了一个非遗酿醋主题的「醋坊」应用,通过数字化方式传承传统酿醋工艺。应用采用经典的"单入口+多内容区+底部导航"布局,包含醋品货架、醋坛墙、醋方册、订单管理、客评口碑五大功能模块,形成完整的酿醋管理生态。 应用特色包括: 独创深棕色货架视觉设计,模仿醋坊货架风格 采用声明式UI开发,实现组件化架构 包含多种数据可视化图表展示销售和工艺数据 支持弹窗交互,实现订单修改、醋方详情等功能 模拟12款醋品、12款醋坛、12款醋方和12条订单数据 应用通过色

m0_68404335的博客 238

HarmonyOS ArkTS 实战:实现一个校园证件照拍摄与预约应用

拍摄预约尺寸选择背景颜色选择在线选片照片下载打印配送拍摄样片价格表我的订单拍摄提醒id: number;id: number;实现了拍摄预约、尺寸选择、背景选择、选片、打印配送等功能。掌握了预约流程、规格选择、订单管理、照片处理等。后续可加入AI抠图、美颜、证件照合规检测、电子照保存、照片冲印等功能。

m0_68332818的博客 155

在React Native项目中实现希尔排序(Shell Sort),HarmonyOS ArkTS API 24,希尔排序是一种改进的插入排序算法,它通过将整个数组分为多个子序列来工作

下面是如何在React Native项目中实现希尔排序的详细步骤:如果你还没有创建React Native项目,可以使用以下命令来创建一个新项目: 添加希尔排序函数 在你的React Native项目中,你可以在任意组件中添加希尔排序的函数。例如,在文件中: 运行你的React Native应用 确保你的开发环境已正确设置,然后运行以下命令来启动应用: 测试希尔排序功能 运行应用后,你应该能看到一个按钮,点击这个按钮会触发希尔排序,并在界面上显示排序前后的数组。通过上述步骤,你就可以在React

2301_77888392的博客 348

基于HarmonyOS ArkTS API 24通过 @Builder 实现了与入口组件状态的绑定(onClose 回调能访问到 this.showAddCandy 等状态)

本文介绍了一个基于HarmonyOS NEXT和ArkTS框架开发的「糖画铺」非遗文化主题App。该应用采用经典移动端布局模式,包含糖画陈列、糖人架、竹签架、订单管理和客评口碑五大功能模块,实现了非遗糖画文化的数字化展示与管理闭环。文章详细解析了应用的架构设计、色彩主题系统、类型定义等核心技术点,展示了如何通过声明式开发构建层次清晰、交互丰富的移动端页面。项目源码完整,可作为ArkUI工程实践的参考范例。

m0_68404335的博客 193

HarmonyOS 6效果实现:height 绑定数据、layoutWeight 比例法、阈值着色完成柱状图 + 横向条形图

本文介绍了基于HarmonyOS NEXT和ArkTS框架开发的「年画坊」非遗木版年画主题App,包含五大功能模块:年画陈列、版样架、木版库、订单管理和客评口碑。应用采用经典移动端布局,通过状态管理、组件化设计、动态颜色映射等技术实现。年画页展示销量数据和陈列列表;版样页提供版样管理和撤样功能;木版页展示题材构成和刻版详情;订单页支持订单修改;客评页呈现用户评价。应用以朱红墨黑为主色调,融合传统年画元素与现代交互设计,实现非遗文化的数字化传承。

2601_96806217的博客 509

HarmonyOS 6.1 实战:所有业务数据以 @Observed 装饰的可观察类 IncenseData 为载体完成常量数组 + 元数据接口

《香道铺非遗和香应用设计解析》 摘要:本文详细介绍了基于HarmonyOS开发的非遗和香主题应用"香道铺"的设计与实现。该应用采用ArkTS声明式开发框架,构建了包含线香陈列、香粉罐、香炉座、订单管理和客评口碑五大功能模块的完整系统。应用创新性地采用"单入口+多内容区+底部导航"架构,实现组件化设计。视觉上独创了"左侧竖条装饰"列表卡片,通过动态颜色映射展现特色。功能上覆盖从线香销量统计、香粉管理到订单处理的全流程,并实现四类交互弹窗。应用通过12套模拟数据完整展示了非遗和香从制作到销售的全生命周期,为传统

2601_96806217的博客 346
上一篇: 鸿蒙HarmonyOS中onNewWant方法讲解
下一篇: 鸿蒙(HarmonyOS)开发中,通信方式详细讲解
梦想不只是梦与想
博客等级 码龄10年 1356粉丝 1161原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值