最佳实践 - 基于鸿蒙生态的轻量化记账工具开发:融合 ArkUI 组件与分布式数据管理

最佳实践 - 基于鸿蒙生态的轻量化记账工具开发:融合 ArkUI 组件与分布式数据管理

最佳实践 - 基于鸿蒙生态的轻量化记账工具开发:融合 ArkUI 组件与分布式数据管理

前言

本文通过 “易记账” 鸿蒙应用实例开发过程中的关键技术场景:entry 模块构建从启动到业务交互的核心链路,借助 common 模块实现跨页面代码复用,利用 ArkUI 组件快速搭建账单录入与统计界面,以及 DatePickerDialog 在不同业务场景下的适配使用,从开发视角还原鸿蒙技术在实际项目中的落地过程,展现鸿蒙生态的实践价值与发展潜力。

项目简介

img
AppScope 存放应用级全局资源与配置,确保全应用样式、常量统一;common 集中管理多模块复用的通用代码、组件与工具类,提升开发效率;entry 作为应用入口模块,承载主界面与核心记账业务逻辑,是用户交互的核心;oh_modules 存储项目依赖的鸿蒙相关模块,为功能实现提供基础支持;screenshots 用于归档应用界面截图,方便项目文档说明使用

鸿蒙技术实践:易记账

1、entry目录结构:components 放可复用的 UI 组件(如账单列表、账单预览组件); data 存数据相关定义(如账单类型、默认模板);entryability 是应用启动与生命周期管理的入口;pages 包含所有业务页面(如新增账单、账单详情、首页等)

模块分层与启动管理:entryability 串联应用生命周期
1、entryability:易记账启动核心,负责 APP 启动时初始化全局上下文、数据库和设置工具,指定打开首页 pages/Index` 首页,并监控 APP 从启动到关闭的全生命周期状态,衔接底层能力和用户界面的关键
首页账单展示:基于 ArkUI 组件的统计与列表呈现
2、index.ets 首页组件,展示用户的账单数据与核心统计信息,页面加载时会从数据库拉取所有账单,自动计算并统计总收入、总支出金额;界面上通过 BalanceViewer 组件展示收支统计结果与日期选择功能,用 BalanceList 组件列出所有账单明细,还通过 PageEntries 组件提供页面入口导航,用户查看账单汇总与明细的核心入口

账单录入交互:自定义键盘与原生组件的融合应用
3、addBalance.ets 新增账单页面组件,让用户选择收支类型、对应的具体类别,通过自定义的数字键盘输入金额,还能添加备注、选择日期,最后把这些账单信息存入数据库,完成账单记录支出

收入

记账

年度账单统计:数据分层处理与多维度展示
4、BillinfoPage.ets 年度账单统计页面组件,展示指定年份的收支汇总数据,页面加载时会从数据库拉取所有账单,通过工具类 BillingInfoUtils 按月份拆分数据,计算并展示 “年结余、年收入、年支出” 总览,以及每个月的收入、支出、结余明细。用户可点击年份区域,通过内置的 DatePickerDialog 选择其他年份,页面会自动更新对应年份的统计数据,是用户查看年度财务状况的核心界面



鸿蒙原生组件实践:DatePickerDialog 的差异化场景应用

维度AddBalance.etsBillInfoPage.ets
用途选择单条账单的具体日期(精确到日)选择年度统计的年份(核心是年份)
触发元素页面中部的 “年 / 月 / 日” 文本页面顶部的 “年份 + 年” 文本
数据更新分别更新activeYearactiveMonthactiveDay更新 activeDate 对象的年份
弹窗作用确定单条账单的记录时间切换需要统计的年度数据
AddBalance.ets(新增账单页):选择单条账单的具体日期
触发时机:点击页面中显示的 “年 / 月 / 日” 文本时触发,用于指定当前记录账单的具体日期

特点:需精确到 “日”,因为单条账单需要具体的记录日期,且通过 activeYear、activeMonth、activeDay 三个变量分别存储,便于后续格式化展示和存入数据库
BillInfoPage.ets(年度账单页):选择统计数据的年份
触发时机:点击页面顶部显示的年份文本时触发,用于切换需要查看的年度账单统计数据

特点:核心是选择 “年份”,月份和日期不影响统计结果,因此直接通过 this.activeDate(完整日期对象)的 setFullYear 方法更新年份,后续统计逻辑会基于该年份筛选数据
两者均依赖鸿蒙内置的 DatePickerDialog 实现日期选择,通过 show 方法配置可选范围和默认值,再通过 onAccept 回调更新页面状态,实现 “点击→选择→更新” 的完整交互

鸿蒙开发实践总结:轻量化应用开发的效率与体验

易记账轻量化记账应用的鸿蒙开发过程中,从架构搭建到功能落地,深刻感受到鸿蒙生态对轻量化应用开发的适配性与效率优势

从开发效率来看,鸿蒙的模块化目录设计(如AppScope统一全局资源、common封装通用工具)让代码复用率显著提升 ,DBManager 数据库管理、BillingInfoUtils 数据处理等通用逻辑只需开发一次,即可在首页、新增账单页、年度统计页跨页面调用;ArkUI 框架的声明式语法则大幅简化了界面开发,像Column/Row布局、ForEach 循环渲染账单列表,配合 @State 状态管理实现数据与 UI 的自动联动,相比传统开发减少了近 30% 的模板代码,尤其是原生 DatePickerDialog 组件的应用,无需自定义滚轮逻辑或适配样式,仅通过简单配置就能满足 “新增账单精确选日/年度统计选年” 两种差异化场景,极大降低了组件开发成本

从用户体验优化来看,鸿蒙的特性让轻量化应用也能具备流畅的交互表现,新增账单页通过 animateTo 实现输入面板的平滑弹出 / 隐藏,避免界面跳转的割裂感;年度统计页基于 BillingInfoUtils 的月份拆分逻辑,实现账单数据的实时计算与展示,页面切换时无明显卡顿,同时, entryability 对应用生命周期的统一管理,确保了 APP 启动时数据库初始化、全局上下文配置的稳定性,从底层保障了用户操作的流畅性

此外,鸿蒙的生态兼容性也为轻量化应用预留了扩展空间 —— 当前 “易记账” 虽聚焦单机记账,但基于 common 模块的分层设计,后续若需拓展多设备同步,如手机与平板账单互通,只需在通用模块中补充分布式数据逻辑,无需重构核心业务代码,这种 “轻量化起步、可拓展演进” 的特性,恰好契合了中小体量应用的开发需求

总结

img
“易记账” 鸿蒙开发实践是轻量化应用与鸿蒙生态高效适配:模块化目录设计降低代码冗余,ArkUI 声明式语法减少界面开发工作量,原生组件DatePickerDialog省去大量自定义适配成本。

同时,生命周期管理与状态联动特性从底层保障应用稳定性与交互流畅性。这种 “低开发成本、高功能完整性” 的体验,适配轻量化工具的开发需求,实现 “开发效率” 与 “用户体验” 双重平衡

👉如果你也在探索鸿蒙轻量化应用开发,或是想第一时间 get 鸿蒙新特性适配,点击链接加入和开发者们一起交流经验吧!https://work.weixin.qq.com/gm/afdd8c7246e72c0e94abdbd21bc9c5c1

Read more

Vivado:使用 ILA 进行在线调试

Vivado:使用 ILA 进行在线调试

目录 一、ILA介绍 二、ILA使用步骤 (1)设计部分 (2)调用ILA IP核 (3)例化ILA IP核 (4)编译综合 三、ILA在线调试 (1)手动运行 (2)运行触发条件 (3)连续触发 一、ILA介绍         Vivado中的ILA(Integrated Logic Analyzer)即集成逻辑分析仪,是一种在线调试工具。ILA允许用户在FPGA上执行系统内的调试,通过实时抓取FPGA内部数字信号的波形,帮助我们分析逻辑错误的原因,从而更有效地进行debug。类似于Quartus中的SignalTap II,也类似于片上的逻辑分析仪。         相较于编写testbench仿真文件仿真debug的方式,使用ILA调试的方法不写tb仿真文件从而节省时间,可直接上板调试并查看波形。 二、ILA使用步骤         ILA常以IP核的方式调用,可以在IP Catalog中搜索ILA,找到该IP核后进行配置。 配置选项包括:样本数据深度、探针数量、

By Ne0inhk

Retinaface+CurricularFace部署教程:Kubernetes StatefulSet部署最佳实践

Retinaface+CurricularFace部署教程:Kubernetes StatefulSet部署最佳实践 你是不是也遇到过这样的问题:好不容易训练好一个人脸识别模型,想把它部署到线上服务,结果发现单机部署扛不住流量,用普通的Kubernetes Deployment又担心服务重启后状态丢失?如果你正在为Retinaface+CurricularFace这样的人脸识别模型寻找一个稳定、可扩展的部署方案,那么你来对地方了。 今天我要分享的,就是如何用Kubernetes的StatefulSet来部署Retinaface+CurricularFace人脸识别模型。这不仅仅是一个简单的部署教程,更是一套经过实践检验的最佳方案。我会带你从零开始,一步步搭建一个高可用、可扩展的人脸识别服务集群。 1. 为什么选择StatefulSet部署人脸识别服务? 在开始动手之前,我们先搞清楚一个问题:为什么不用更常见的Deployment,而要选择StatefulSet? 我见过太多团队在部署有状态服务时踩坑。人脸识别模型服务有几个特点: * 模型文件大:Retinaface和C

By Ne0inhk
Flutter 三方库 discord_interactions 的鸿蒙化适配指南 - 在 OpenHarmony 打造高效的社交机器人交互底座

Flutter 三方库 discord_interactions 的鸿蒙化适配指南 - 在 OpenHarmony 打造高效的社交机器人交互底座

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 discord_interactions 的鸿蒙化适配指南 - 在 OpenHarmony 打造高效的社交机器人交互底座 在现代社交应用与办公协同工具的开发中,集成强大的机器人(Bot)交互能力是提升活跃度的关键。discord_interactions 库为 Flutter 开发者提供了一套完整的、遵循 Discord 官方协议的交互模型,涵盖了从 Slash Commands(斜杠命令)到 Webhook 签名验证的核心功能。本文将深入解析如何在 OpenHarmony(鸿蒙)环境下,结合鸿蒙的安全机制与网络特性,完美适配 discord_interactions 到你的鸿蒙应用中。 前言 随着鸿蒙系统(HarmonyOS)进入原生应用开发的新纪元,跨平台社交工具的适配需求日益增长。discord_interactions 作为一个纯

By Ne0inhk

【论文阅读笔记|CVPR2025】nnWNet: Rethinking the Use of Transformers in Biomedical Image Segmentation and Cal

论文题目:nnWNet: Rethinking the Use of Transformers in Biomedical Image Segmentation and Calling for a Unified Evaluation Benchmark 论文来源:CVPR2025 论文链接:openaccess.thecvf.com/content/CVPR2025/papers/Zhou_nnWNet_Rethinking_the_Use_of_Transformers_in_Biomedical_Image_Segmentation_CVPR_2025_paper.pdf 代码链接:GitHub - Yanfeng-Zhou/nnWNet: [CVPR 2025] nnWNet:

By Ne0inhk