我做了一个 HarmonyOS 版「精力电池」App,用 ArkUI 把每天的充能和耗电可视化

基于PWM的汽车仪表步进电机微步驱动优化实践 本文深入探讨了基于PWM的微步驱动技术,用于优化汽车仪表步进电机的运行性能。通过将传统的分步驱动升级为PWM微步细分驱动,利用正弦/余弦查表法合成旋转磁场,有效消除了指针抖动与噪声,实现了指针的平滑、精准运动。文章以STM32和VID2905电机为例,提供了详细的硬件连接、代码实现及高级优化技巧,为提升汽车仪表体验提供了实用方案。 阅读详情

需求背景:下午三点的「脑子被抽空」

上个月连续赶了两周需求,某天下午三点坐在工位上,盯着屏幕发现自己一个字都写不出来。不是不想写,是脑子像被抽空了。打开手机看了眼电量——37%,我心想:我自己大概也就剩这么多了。

这个念头一冒出来就挥之不去。我们对「百分比在掉」这件事有天然的紧迫感,如果把自己的精力也做成一块电池呢?充了什么、耗了什么、还剩多少,一目了然。于是我做了「元气手账」,一个精力收支记录工具。iOS 版用 SwiftUI 写的,最近我又着手把它迁移到 HarmonyOS 生态,用 ArkUI 重新实现了一遍核心交互,这篇文章聊聊整个过程的设计思路和技术实现。

核心逻辑:一块虚拟电池的加减账本

产品逻辑很简单:每天你有一块虚拟电池,满电 100%。做了让你恢复精力的事(午睡、散步、和朋友聊天),加电;遇到消耗精力的事(无效会议、争吵、连续写代码三小时没休息),减电。实时看到当前余额。

不需要写长篇日记,也不需要给情绪打 1-10 分。我预设了几十个常见场景胶囊,比如「深度工作 90min」「刷短视频 30min」「被甲方改需求」,点一下就记上了,整个过程不超过 5 秒。

跑了一周数据之后,App 会自动帮你找出两类东西:吸血鬼(持续让你掉电最猛的事)和绿洲(充电效率最高的事)。我自己跑出来的结果挺意外的——以为刷 B 站是休息,实际上它是个轻度耗电项;反而是出门买杯咖啡走一圈这种小事,充电效率极高。

技术实现:从 SwiftUI 到 ArkUI 的迁移思考

iOS 版最低支持 iOS 17,数据层用了 SwiftData,不依赖任何后端。选 SwiftData 而不是 Core Data 主要是因为模型定义太舒服了,配合 @Query 做列表刷新几乎不用写额外代码。

电池余额的核心计算本质上就是一个 reduce,iOS 端的实现长这样:

func currentBalance(for date: Date) -> Int {
    let logs = fetchLogs(for: date)
        let balance = logs.reduce(100) { current, log in
                switch log.type {
                        case .charge:
                                    return min(100, current + log.value)
                                            case .drain:
                                                        return max(0, current - log.value)
                                                                }
                                                                    }
                                                                        return balance
                                                                        }
                                                                        ```
没什么花哨的算法,但这种「加减账本」的心智模型比让用户纠结「我今天到底是 6 分还是 7 分」好懂太多了。迁移到 HarmonyOS 时,这部分逻辑用 ArkTS 重写非常直接,数据持久化我选了关系型数据库 relationalStore,配合 HarmonyOS 的 DataAbility 做本地存储,体验上和 SwiftData 的声明式风格各有优劣,但胜在跨设备同步的扩展性更好。

电池动画是我花时间最多的部分。iOS 端用的是 `TimelineView` 配合 `Canvas`,帧率控制在 30fps,实测在 iPhone 12 mini 上功耗可以忽略不计。本来想用 Metal 写 shader 做液体效果,后来觉得杀鸡用牛刀,改成了渐变色块 + 圆角 mask,视觉上差不多但代码量少了 80%。在 ArkUI 这边,我用 `Canvas` 组件配合 `@State` 驱动重绘,思路类似:

```arkts
@Entry
@Component
struct BatteryView {
  @State balance: number = 100
  build() {
      Column() {
            Canvas(this.bindCanvasContext)
                    .width('80%')
                            .height(200)
                                    .onReady(() => {
                                              this.bindCanvasContext.bindbindbindRectBindings
                                                        let ctx = this.bindCanvasContext
                                                                  let fillHeight = 200 * (this.balance / 100)
                                                                            ctx.fillStyle = '#34C759'
                                                                                      ctx.fillRect(0, 200 - fillHeight, 280, fillHeight)
                                                                                              })
                                                                                                    Text(`${this.balance}%`)
                                                                                                            .fontSize(48)
                                                                                                                    .fontWeight(FontWeight.Bold)
                                                                                                                        }
                                                                                                                          }
                                                                                                                          }
                                                                                                                          ```
ArkUI 的声明式语法写动画组件还是很顺手的,和 SwiftUI 的心智模型接近,迁移成本比我预想的低。

## 和其他工具的定位差异

用过 Bearable、Daylio、小日常这些。Bearable 功能强但太重了,每次记录要选半天维度;Daylio 本质是情绪日记,不是精力管理;小日常是习惯打卡,关注的是「做没做」而不是「做了之后你是充电还是掉电」。

元气手账只关心一件事:你的精力收支。这个定位窄,但我觉得对考研党和高强度码代码的人来说反而够用。你不需要一个大而全的生活管理系统,你需要的是快速知道自己还剩多少电、以及什么东西在偷偷吸你的电。

## 目前状态和后续计划

iOS 版已经上架 App Store,搜「元气手账」就能找到。免费下载,核心功能不收费,吸血鬼/绿洲洞察是订阅解锁的(我得恰饭)。HarmonyOS 版还在开发中,计划适配鸿蒙的卡片服务,让用户在桌面就能看到当前电量和一键记录,这个场景和 HarmonyOS 的服务卡片能力天然契合。

如果你也经常在下午三点感觉自己被掏空,可以先试试 iOS 版记一周看看。不一定要长期用,哪怕只是跑一周数据看看自己的吸血鬼 TOP3 是什么,也挺有意思的。

如果你也在做鸿蒙开发,或者对 SwiftUI 到 ArkUI 的迁移有经验想交流,欢迎评论区聊,技术实现或者产品设计都行。

yolov8涨点系列之轻量化主干网络替换 yolov8涨点系列之轻量化主干网络替换,以EfficientVit为例 阅读详情

相关推荐

HUAWEI华为荣耀MagicBook MateBook B D E X 13 14 16 笔记本MateStation台式机原装Win10出厂Windows11系统

HUAWEI华为MateBookX原装出厂系统恢复原厂系统,型号:MACHC-WAE9LP、EUL-W29P、MACHR-W19L、MACHR-W29、MACHD-WFE9、MRGF-16、MACHR-W19BL、MACHD-WFE9Q、WT-W19、Mach-W19、Mach-W29、WT-W09、WT-W19、MACH-W29等。HUAWEI华为MateBookE原装出厂系统恢复原厂系统,型号:PAK-AL09、GK-W7X、GK-G58、GK-W76、DRC-W76等。

QQ17855069的博客 17万+

我用 ArkTS 的思路做了一个精力管理 App:把每天的状态算成电池电量

还是下午临时加塞的需求评审?这个隐喻的好处是零学习成本——充电的事让电量回升,耗电的事让电量下降,剩余电量就是你当前的精力余额。如果用 HarmonyOS 的 ArkUI 来类比这个交互,它的思路类似于把每个胶囊做成一个可点击的状态组件,点击后触发数据更新并驱动电池 UI 刷新。我设计了一个叫「胶囊」的交互:用户预设常见的充能/耗能场景(午睡、深度工作、通勤、社交闲聊),每个场景是一颗胶囊,点一下就完成记录。也试过习惯打卡类 App,但打卡只告诉我"做了没做",回答不了"这件事让我更累还是更有劲"。

same4869的博客 203

adas硬件_ADAS智能辅助驾驶系统硬件在环(HIL)测试之硬件介绍

这篇主要分享的是ADAS融合系统的HIL测试系统的硬件结构及其作用,其主要包括上位机、机柜、雷达模拟器系统、雷达暗箱系统以及视频暗箱。 上位机 上位机主要运行HIL测试系统的相关软件,测试人员所有的前期准备工作与测试操作均在上面进行,并监控测试结果,其通过网口实现与NI实时机的通信,上位机将VeriStand项目工程下载至NI实时机运行。机柜 机柜主要由可编程电源...

weixin_39580748的博客 2239

我用 ArkTS 做了个精力管理 App,把自己当电池来记录状态

这就是我做的「元気手账」,一个跑在 HarmonyOS NEXT 上的精力记录工具。用 ArkTS + ArkUI 写的,纯本地存储,交互尽量压到两秒内完成一次记录。后来想明白了一件事:我不需要记录"心情",我需要记录"电量"。这个隐喻特别好使——"开会耗电"比"开会让我情绪低落"说起来轻松多了,记录的心理门槛直接降了一大截。身边用 HarmonyOS 的朋友问过好几次"有没有鸿蒙版",问多了就动手了。之前试过各种情绪记录、时间管理的 App,要么让我写一大段日记,要么让我给心情打 1-10 分。

same4869的博客 58

天地图API避坑指南:从零开始实现地址搜索与坐标标记

本文是一份天地图API实战避坑指南,详细讲解了从申请密钥、初始化地图到实现地址搜索与坐标标记的全过程。针对开发中常见的坐标偏移、搜索建议不显示、事件监听失效等核心难题,提供了具体的解决方案和代码示例,帮助开发者高效、稳定地集成天地图服务。

weixin_29326909的博客 263

基于Simulink的轨道交通信号控制系统仿真详细介绍

轨道交通信号控制系统是确保列车安全、高效运行的核心技术。通过Simulink进行信号控制系统的仿真,可以验证系统的设计、优化调度策略并提高安全性。以下是如何在MATLAB和Simulink中设计并仿真一个轨道交通信号控制系统的详细步骤。通过上述步骤,我们成功设计并实现了基于Simulink的轨道交通信号控制系统仿真。该系统能够根据列车位置、速度和轨道状态生成控制指令,确保列车的安全、高效运行。通过虚拟场景仿真、硬件在环测试和实机测试,验证了系统的性能,并通过参数优化进一步提升了系统的可靠性。引入智能调度。

xiaoheshang_123的博客 462

〖物流终端实战 05〗纯血鸿蒙 ArkTS 高阶性能优化:长列表渲染、组件复用与内存泄漏排查

本文深度剖析鸿蒙ArkTS高阶性能优化,直击长列表卡顿与内存泄漏痛点。针对渲染,指出ForEach全量构建的缺陷,强调采用LazyForEach(V2推荐Repeat)配合增量通知及稳定业务Key;针对组件复用,明确@Reusable仅复用实例不重置状态,必须在aboutToReuse中手动清理UI状态;针对内存泄漏,总结全局监听未注销、定时器未清理及长生命周期对象持有页面引用三大元凶,并指导通过DevEco Profiler的Heap快照排查引用链。文章强调优化需遵循“先定位后改代码”原则,助力开发者打造

Eyf • 半字节的博客 632

深度解析机器人关节位置环控制:从理论到实践

本文系统阐述了机器人关节位置环控制的核心原理与实现方法。首先介绍了关节控制的基础框架,阐明位置环在闭环控制中的关键作用。随后深入解析PID控制算法原理,包括比例、积分、微分项的功能与参数整定原则。在软件实现部分,提供了模块化设计思路和Python伪代码示例,强调实时性保障和异常处理机制。文章还包含典型面试问题解答和应用案例,展示如何通过参数优化将定位精度提升20倍。最后指出未来发展趋势将聚焦算法自适应性和系统稳健性。全文兼顾理论深度与实践指导,为开发者提供从基础到进阶的完整技术路线图。

郑伟强dev的专栏 49

AppGallery 上架自检 SOP:签名、隐私对齐与包体校验实战【鸿蒙心迹】

上架被驳回多因签名、隐私声明与包体不一致。本文提炼“签名→隐私对齐→包体校验”自检SOP,配套一键脚本与权限三角校验代码,实现90%驳回前置拦截。通过CI强制release签名、代码/声明/功能三者权限对齐、包体完整性校验,确保提审一次过。实战清单可直接抄,让过审从运气变为流程。

wdracky的专栏 311

在zcu102开发板上使用PetaLinux运行Qt程序

请注意,上述步骤只是一个概述,并且可能需要根据特定的开发环境和要求进行适当的调整。如果你是一个初学者或者对于这些领域不太熟悉,建议在尝试之前阅读相关的文档和教程,或者寻求专业人士的帮助。在"Projects"菜单中,选择"Build & Run"选项,并在"Build"步骤中选择正确的工具链。注意:如果Qt程序依赖于其他库文件,需要将这些库文件一起复制到PetaLinux工程的根文件系统目录中,并在Qt程序中正确地配置库文件路径。如果一切顺利,PetaLinux系统将启动,并自动运行Qt程序。

UhxzCombined的博客 698

Unity 工具 之 ZXing QRCode 二维码的生成和识别(可设置生成不同颜色的/带图标的二维码)

Unity 基础 之 ZXing QRCode 二维码的生成和识别(可设置生成不同颜色的/带图标的二维码) 目录 Unity 基础 之 ZXing QRCode 二维码的生成和识别(可设置生成不同颜色的/带图标的二维码) 一、简单介绍 二、实现原理 三、注意实现 四、效果预览 五、ZXing.net ( zxing.unity.dll ) 插件下载 六、实现步骤 七、关键代码 一、简单介绍 Unity 开发中,自己整理的一些游戏开发可能用到的功能,整理归档,方便游...

仙魁XAN 9824

【鸿蒙专题与实战】测试体系:单元测试、组件测试与 UI 测试

本文系统讲解鸿蒙开发中的三层测试实践:底层单元测试(用Hypium框架,优先覆盖纯函数、边界与异常)、中层ViewModel逻辑、顶层仅测3-5条关键UI路径。强调测试应“越往下写得越多”,因单元测试快且成本低,而UI测试慢易出错。通过实例说明断言拆分提升定位效率,结合覆盖率报告(hvigorwtest --coverage)发现盲区,核心是“用覆盖率找漏测,而非追求数字”。附五步落地清单:建测试文件、按优先级补用例、精简UI测试、生成报告、定位未覆盖行。下一篇将开启实战项目:从需求到上架全流程。

信息安全领域优质创作者|操作系统领域专家 161

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

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

窗口销毁了监听还在,HarmonyOS 7 生命周期释放的归属分界

综上所述,onWindowStageWillDestroy 是窗口监听的最后安全出口,onWindowStageDestroy 只负责断开窗口引用,onDestroy 管 Ability 级资源——三者不是“程度不同的退出回调”,而是各自有明确的归属范围。窗口监听的所有者是 WindowStage,定时器的所有者是 UIAbility,播放器的所有者是页面或 Ability(取决于你在哪一层创建的),ApplicationContext 监听的所有者是 Ability 的 context。

qq_61905492的博客 197

WINCC7.3破解文件

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

React Native for OpenHarmony 实战:react-native-file-logger 日志库鸿蒙化适配

本文记录了将 react-native-file-logger 适配至 OpenHarmony 的实战过程。基于鸿蒙 7.0 模拟器,通过 5 个 TurboModule 方法实现日志落盘、轮转、列举与删除,采用 fileIo 实现核心功能,支持按大小和跨天轮转,归档文件命名精确至毫秒。邮件发送功能因平台限制按能力边界处理,明确拒绝并提示用户手动导出。验证通过,日志文件结构清晰,内容完整,产出 HAP 示例与独立 HAR 库,中英双语文档齐全,为鸿蒙应用日志管理提供可靠方案。

m0_62930060的博客 228

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

鸿蒙平板能当电脑第二块屏幕吗?ToDesk、向日葵镜像/副屏实测

本文对比测试了ToDesk鸿蒙版4.8.3.0与向日葵鸿蒙版16.8.0在连接鸿蒙平板作为电脑副屏的表现。结果显示,ToDesk可直接实现镜像屏与扩展屏功能,支持参数调节,操作流畅;而向日葵副屏需开通会员才能使用。对于已有鸿蒙平板的用户,ToDesk能有效拓展工作空间,提升多任务效率,尤其适合临时办公、出差等场景,具备较高实用价值。

2501_91062530的博客 2303

【鸿蒙心迹】深色模式适配全链路——从配置到自定义(HarmonyOS 7.x)

系统切深色模式,应用没跟着变;图片在深色模式下刺眼;自定义绘制颜色没适配——深色模式不是"换个背景色",是颜色/图片/材质/状态栏的全链路适配。本文用涟漪睡眠 App 适配深色模式为案例,给完整方案与 5 个踩坑。

腾讯云创作之星、华为云云享专家,深耕电商全栈高并发系统实战,分享可商用商城项目源码。 361

平行视界兼容模式与魔法变量配置避坑【鸿蒙心迹】

本文详解折叠屏兼容模式下“魔法变量”配置的五大易错点,强调maxWindowRatio与minWindowRatio必须满足max ≥ min、centerAlign需显式设为true、minCompitableVersion拼写为Compitable等关键细节。通过校验函数实现上线前批量机型测试,结合排查流程图快速定位分栏失效问题。虽兼容模式可零代码实现分栏,但存在状态共享风险,长期仍建议按规范开发原生平行视界分栏。

wdracky的专栏 1086

【共创稿事节】HarmonyOS 7.0 Marquee跑马灯:从接入到生产验证

HarmonyOS 7.0 Marquee跑马灯:从接入到生产验证:真实工程复盘,附代码与验证方法。

2401_84996024的博客 160

鸿蒙远程控制软件哪个好?华为远程PC、ToDesk、向日葵三款实测

综合来看,本次横测最终更推荐ToDesk:它在支持跨品牌连接的基础上,外接鼠标、全屏远控、移动设备协助和多屏功能覆盖更完整,更适合作为主力远控工具。

2401_85083137的博客 330

HarmonyOS 7 应用冷启动与包体积优化实录

我们在构建脚本里加入了一个自动转换任务,将除了极其复杂的透明图之外的所有静态资源,全部转换为 WebP 格式。为了这 5% 的用户,让 95% 的用户承担 30MB 的下载成本,显然不划算。目录,里面躺着无数历史遗留的高清切图,有些是早被废弃的活动图,有些是同一张图的多个尺寸备份。这一招,直接砍掉了将近 15MB 的死重。我们将短视频相关的所有代码、图片、甚至底层的播放器三方库,全部剥离到了独立的 Feature 模块(HSP)中。包变小了,启动速度自然会快一点,但真正的瓶颈在于冷启动时的初始化逻辑。

2502_91284977的博客 169

导航该收起来,还是留在左边?HarmonyOS 6 侧栏小练习

手机宽度下,分类一直占着左边,正文会被挤得很窄;宽窗口下,每次切分类都先打开一个抽屉,又显得多了一步。这次让同一个导航内容根据空间换一种出现方式:宽时常驻左侧,窄时放到覆盖式抽屉里。分类选中状态始终是一份,切完分类后收起抽屉,正文立即显示对应路线。判断这份导航是否合适,可以回到一次切路线的动作:找得到目录,选得中分类,关掉后正文仍是刚才那一条。宽窄变化只影响目录出现的位置和时机。后面扩展层级或接入真实路线时,也先保住这一条连贯的操作。

程序猿追的博客 250

HarmonyOS GSNode 场景控制实战:位置、缩放、可见性与状态同步

基于 HarmonyOS Spatial Recon Kit 操作 GSNode,详解插件与模型加载、position/scale/visible 属性、快照与 revision、高频滑杆合并、状态持久化及真机排障。

2401_84996024的博客 302

从 JChemPaint 到 BondDraw:一个化学结构编辑器的鸿蒙 PC 上架实录

这次上架最大的收获是流程的确定性:AGC 五步——建应用、签名、传包、审核、上架——对任何形态的鸿蒙 PC 应用都一样,坑集中在签名分流和工程收尾两处。而纯 ArkTS 路线的回报也在这一刻兑现:几百 KB 的包体、零权限的权限表、一个可以低成本持续迭代的市场通道——“版本/升级”入口已经在 AGC 里候着,下一版只是 versionCode 加一的事。

全沾软贱开发攻城狮 1万+

【共创稿事节】HarmonyOS 应用上架全流程中的隐私合规:权限最小化、数据本地化与 AppAnalyzer 体检

面向准备首次上架的鸿蒙开发者。本文以一个"仅 2 项权限、零联网"的本地应用为例,给出 module.json5 权限声明、DocumentViewPicker 免权限保存、systemShare 分享、relationalStore 参数化查询的真实代码,并附驳回原因自查表与打包验证输出。

腾讯云创作之星、华为云云享专家,深耕电商全栈高并发系统实战,分享可商用商城项目源码。 361

Mac、Windows、HarmonyOS 三台电脑,截图习惯怎么统一?三种方案对比

同时用 Mac、Windows 和 HarmonyOS 电脑的人,截图最大的麻烦不是功能,而是每台电脑一套键位和一套习惯。本文比较三种做法:全用系统自带、每个平台装一个专用工具、用一个三平台都有的工具,并说明各自的代价。

BingMao_Tp的博客 240

【鸿蒙专题与实战】多模块工程:HAP、HAR、HSP 与按需加载

本文详解鸿蒙开发中三种模块(Entry、HAR、HSP)的差异与应用场景,重点解析HAR与HSP在代码复用与包体大小上的关键区别,强调合理使用HAR(小工具库)与HSP(共享业务)的时机。通过featureHAP按需加载降低首包体积,结合编译时间与代码复用度判断拆分时机,并预告下一篇将深入持续集成流水线,助力高效协作开发。

信息安全领域优质创作者|操作系统领域专家 336
上一篇: 我做了一款鸿蒙App:把每天通勤步数走成一条环球公路旅行
下一篇: 我做了一款鸿蒙健康记录App:血压血糖体重用药,帮全家管好慢性病数据
SameX-4869
博客等级 码龄17年 3354粉丝 657原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值