我做了一款 HarmonyOS 订阅管理 App:用「斩」这个动作,让停掉订阅变得有成就感

Flutter学习指南:先跑通Hello World,再看教程 移动应用开发中,环境配置往往是初学者被劝退的第一道门槛,而依赖下载和模拟器启动更是高频卡点。Flutter作为跨平台开发框架,凭借自绘引擎和热重载机制,为开发者提供了高效的UI构建体验。理解其从flutter create到flutter run的完整链路,掌握状态管理和工程化基础,是独立开发的关键。本文围绕真实学习路径,从环境变量、Gradle配置、模拟器运行等实操细节展开,帮助读者建立最小闭环认知,让教程学习真正有效。 阅读详情

先说说这个 App 解决了什么问题

说实话,我自己就是被「订阅刺客」刺过的那个人。

某个月查信用卡账单,发现多了一笔 68 元的扣费。找了半天才想起来——三个月前注册了一个 AI 写作工具的试用,当时没取消,它就一直在扣。68 乘以 3,丢了 200 多块,全在毫无感知的情况下。

我猜这事儿不止发生在我身上。

所以我做了这个 App,叫订阅斩(SubKiller),核心就一件事:帮你搞清楚每个月的订阅到底在花多少钱,然后主动斩断那些你已经不需要的。


为什么选择 HarmonyOS

这个 App 原本是 iOS 版本,用 SwiftUI + SwiftData 写的。做完之后我在想,HarmonyOS 用户里有大量华为手机用户,他们同样面临 Netflix、爱奇艺、腾讯视频、各种 SaaS 工具的订阅管理问题,而鸿蒙平台上做这类工具的 App 几乎没有。

加上 HarmonyOS NEXT 的 ArkUI 框架这两年成熟了不少,ArkTS 写起来比早期的 JS/eTS 顺手很多,我就决定移植一版过来。


核心功能设计

订阅仪表盘

App 打开第一屏就是一个总览仪表盘:本月预计支出多少、有几个活跃订阅、有几个「高危」需要审查。

我刻意不做成复杂的图表堆砌。就两个数字最重要:这个月要花多少,有几个该斩的。

风险等级检测

这是我觉得最有价值的功能。每个订阅会根据三个维度自动打分:是否处于试用状态、距下次扣费还有几天、月费金额是否超过 50 元。三个维度组合出高危/中危/低危三个等级,高危订阅在列表里有明显的红色标记。

这比单纯「记账」多走了一步:主动告诉你「这个可能在白花钱」。

「斩」这个交互

停用订阅不叫「删除」或者「停用」,叫斩。

点下去有个小动画,订阅条目会归档到「已斩」Tab。这个设计挺重要——把一个有点难受的行为(承认自己之前在浪费钱)变成一个有仪式感的主动动作。斩了就斩了,干净利落。而且随时可以在「已斩」里恢复,没有心理负担。


技术实现:ArkUI 的几个细节

在 HarmonyOS 版本里,订阅数据的核心模型用 ArkTS 的 class 来描述,周期换算逻辑直接对应了 iOS 端的 BillingCycle.multiplierToMonthly:

enum BillingCycle {
  Monthly = 0,
    Quarterly = 1,
      Yearly = 2
      }
function toMonthlyAmount(price: number, cycle: BillingCycle): number {
  switch (cycle) {
      case BillingCycle.Monthly:   return price;
          case BillingCycle.Quarterly: return price / 3.0;
              case BillingCycle.Yearly:    return price / 12.0;
                  default: return price;
                    }
                    }
                    ```
月度总支出就是把所有 active 状态订阅跑一遍 `toMonthlyAmount` 求和,逻辑非常直接。

风险评分这块,高危的判定条件是:**试用状态且 7 天内扣费**,或者**月费超过 50 元且 3 天内扣费**。前者是「试用陷阱」,后者是「大额即将到期」。两个条件满足任意一个就标红。中危是月费超过 50 元但还有 7 天以上,或者试用状态但还有 7 天以上缓冲。

ArkUI 的 `List` + `ListItem` 渲染订阅列表体验还不错,左滑「斩」的手势配合 `animateTo` 做归档动画,整体流畅度在鸿蒙设备上表现可以:

```arkts
@Component
struct SubscriptionCard {
  @Prop item: SubscriptionItem
    onKill: () => void = () => {}
  build() {
      Row() {
            Text(this.item.icon).fontSize(28)
                  Column() {
                          Text(this.item.name).fontSize(16).fontWeight(FontWeight.Medium)
                                  Text(`¥${toMonthlyAmount(this.item.price, this.item.cycle).toFixed(2)}/月`)
                                            .fontSize(13).fontColor('#888888')
                                                  }.alignItems(HorizontalAlign.Start).layoutWeight(1)
                                                        if (this.item.riskLevel === 'high') {
                                                                Text('高危').fontColor(Color.Red).fontSize(12)
                                                                      }
                                                                          }
                                                                              .padding(16)
                                                                                }
                                                                                }
                                                                                ```
「高危」标签那个红色提示在实际使用中效果很明显——用户很难忽视它。

---

## 订阅服务预设库

录入订阅是个摩擦点。如果每次都要手动输入名称、金额、周期,用户懒得用。

我内置了一个预设库,覆盖了 Netflix、YouTube Premium、Disney+、爱奇艺、腾讯视频、Spotify、Apple TV+、各类 SaaS 工具等大几十个常见服务,带参考价格和图标。搜索时做了模糊匹配,输入「net」能匹配到 Netflix,输入「yt」能匹配到 YouTube Premium。

匹配算法用了别名打分(`SubscriptionCatalogMatch` 里的 `score` 字段),取最高分的结果自动填入表单。用户只需要确认一下价格和下次扣费日期就行。

---

## 一些没做进去的功能

有几个功能想了很久最后没上:

- **自动识别订阅扣费**(读取短信/邮件):鸿蒙和 iOS 的权限管控都很严,合规风险太大,放弃了
- - **多人共享订阅分摊计算**:数据模型里已经有 `isShared` 和 `membersCount` 字段,UI 层还没完整实现,留到后续版本
- - **导出账单**:有用户问过这个,在排期里
---

## 现在的状态

iOS 版本已经在 App Store 上架,上架两周,下载量不到 100。冷启动阶段嘛,没什么可遮掩的。有意思的是,第一个留言的用户说「一打开就发现了两个忘掉的订阅,直接斩了,感觉很爽」——这个反馈让我觉得方向是对的。

鸿蒙版本正在适配 HarmonyOS NEXT,预计近期提交华为应用市场审核。

**iOS 版可以直接在 App Store 搜「订阅斩」或「SubKiller」,App ID 是 6761400615。鸿蒙版上架了我会在评论区第一时间更新链接。**

有 iOS 背景的同学迁移 ArkUI 比想象中顺,Preferences 那块坑挺多,有问题欢迎评论区聊。
鸿蒙第16篇——数据持久化 本文介绍的数据持久化是指鸿蒙应用的数据持久化存储。它是将内存中的数据通过文件或数据库的形式保存到设备存储中。鸿蒙支持多种数据存储方式, 包括用户首选项Preferences、 键值型数据库KV-Store和关系型数据库。 阅读详情

相关推荐

Openharmony - 设备异常关机Power Down问题分析

Openharmony - 设备异常关机Power Down问题分析

fulinux的博客 1431

互联网晚报 | 12306推出购票需求预填和起售提醒功能;华为与懂车帝停止合作;38个核心城市企业平均月薪超1万元...

铁路12306推出购票需求预填和起售提醒功能据中国铁路消息,自1月3日零时起,铁路12306手机客户端推出购票需求预填和火车票起售提醒订阅两项新功能,旅客通过铁路12306官方平台购票将更加方便快捷。(第一财经)今日报告:喜马拉雅&新华社发布《2023国民收听趋势白皮书》,下载报告去公众号:硬核刘大后台回复“国民收听”,即可下载完整PDF文件。申明:报告版权归喜马拉雅&新...

liudada8265的博客 7401

ADAS系统架构与核心功能解析:从感知到执行的智能驾驶方案

高级驾驶员辅助系统(ADAS)是现代汽车智能化的核心技术,其本质是通过传感器融合、算法决策与车辆控制,构建一个“感知-决策-执行”的闭环系统。在技术原理上,ADAS依赖摄像头、毫米波雷达、激光雷达等多源传感器进行环境感知,并通过深度学习模型与融合算法(如卡尔曼滤波)构建精准的环境模型。其技术价值在于提供主动安全冗余与驾驶舒适性,核心应用场景包括自动紧急制动(AEB)、自适应巡航(ACC)及车道保持辅助(LKA)等。随着传感器成本下降与域控制器算力提升,ADAS正从高端配置向主流车型快速普及,并逐步向高阶导航

weixin_31062533的博客 414

HarmonyOS 7 端侧 AI 图像超分的工程化落地

用户抱怨网络差的时候图片传不上去,更严重的是,大量的私密照片上传到云端,引发了严重的隐私合规审查危机。痛定思痛后,我们决定把 AI 模型直接塞进手机里,用端侧的 NPU 来做推理,但这绝非易事。我们首先在服务端对模型进行了知识蒸馏,把参数砍掉了一大半,然后利用 MindSpore Lite 的转换工具,将模型转成了鸿蒙底层支持的。即便如此,模型依然有 20 多兆,我们最终选择了 FP16 量化,牺牲了极其微小的画质,换取了内存占用减半。推理过程极其消耗 CPU 和内存,稍微大一点的图,处理时间长达几秒。

2602_97267507的博客 158

IC 时钟设计核心问题与高质量系统设计指南(附源码)

本文深入探讨了IC时钟设计的核心问题与高质量系统设计方法。时钟系统作为IC的"心脏",其性能直接影响时序稳定性、功耗效率和可靠性。文章从五个维度展开分析:时钟源选择与性能匹配、时钟分配网络设计、抖动抑制、多时钟域管理和功耗优化。针对高质量时钟系统设计,提出了时钟源优化、时钟树结构优化、干扰抑制与仿真验证等具体方法。同时,系统阐述了时钟与复位的协同设计关系,强调异步复位同步释放等技术的重要性。文章还总结了高质量IC系统设计的综合要点,包括电源/信号完整性、时序功耗平衡、可靠性设计及全流程验

Open 1060

SAP中常见的Debug方式

原文链接:https://mp.weixin.qq.com/s/wT4kThFKYV0PQYhCqpXRWg 大家可以关注我个人公众号,所有分享内容,会在公众号第一时间推送,且阅读排版更好。 愿大家的学习,轻松且愉快。 如果大家觉得有用,希望转发关注,谢谢 导读 SAP系统在企业的应用时,都不会只使用标准功能。 通常情况下,基于特殊的行业需求,以及某些业务部门的管理需求等,都会额外开发出一些增强,报表,对话功能,接口等,从而保证系统的正常运转。 标准知识的逻辑,我们...

Kerwin-G的博客 1万+

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

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

Eyf • 半字节的博客 638

Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting 论文笔记

Spatio-Temporal Graph Convolutional Networks: A Deep Learning Framework for Traffic Forecasting 论文笔记-----GCN在交通领域的应用(二) 一、论文翻译: 1、摘要: 及时准确地交通预测对于城市交通控制和指导具有至关重要的意义。由于交通流量的非线性和复杂性,传统的方法不能满足中长期预测任务的需求,并且往往会忽略时空数据的时间和空间依赖特性。在这篇论文中,为了处理在交通领域的时间序列预测问题...

cy_believ的博客 1916

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

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

wdracky的专栏 311

(Linux)DHCP 超级作用域和中继代理(超难受做了超久)

DHCP服务器在192.168.159.0 可以实现分配IP的功能,现在要跨网段分配IP 就需要用到DHCP中继代理。中继代理有两张网卡分别eth0:IP 192.168.159.2 ;eth1: IP:192.168.200.2 。现在要实现192.168.200.0网段的客户机可以获取DHCP服务器的IP。中继代理其实是相当于一个路由器的作用 DHCP服务器的IP地址 :192.168.159...

DJ_joker的博客 2223

JY02无刷电机驱动芯片的硬件设计与调试实战

本文详细介绍了JY02无刷电机驱动芯片的硬件设计与调试实战。重点解析了其外置MOSFET的设计优势,提供了从电源滤波、功率MOSFET选型到电流采样保护的核心电路设计指南。文章还分享了安全上电、动态测试及常见问题排查的完整调试流程,并探讨了开关优化、闭环测速等性能提升技巧,帮助开发者构建稳定高效的无刷电机驱动系统。

weixin_29193359的博客 363

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

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

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

ABAP Cloud 里的高性能日志:CL_BALI_LOG、XCO_CP_BAL 与 AML 的性能对比与选型指南

ABAP日志框架性能对比与选型建议 本文对比了ABAP Cloud中三种主流日志框架的性能表现与适用场景: 标准BALI:适合明确需要保存日志的场景,保存路径短,性能较好 XCO_CP_BAL:API更现代但性能较低,适合需要即时可见性的场景 AML:开源框架,擅长消息缓冲,适合批量处理时暂存消息 测试结果表明: 纯记录不落库时AML最快 需要保存时BALI性能最优 second connection不提升性能但能确保日志留存 选型建议: 高频批处理优先AML+BALI组合 故障诊断考虑XCO的即时可见性

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 214

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

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

qq_61905492的博客 198

system.img解包打包工具

最近需要对system.img进行解包,修改系统属性和添加自己的APK,再打包烧录,整理俩个方法。 system.img解包打包工具方法一 1、把system.img转换成ext4格式 ./simg2img system.img system_ext4.img 2、挂载ext4到systemMount目录进行修改 sudo mount system_ext4.img systemMount/ -o loop 3、修改完成后 unmount 退出挂载使用如下命令

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 9704

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

m0_62930060的博客 237

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

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

2501_91062530的博客 2320

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

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

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

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

wdracky的专栏 1088

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

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

2502_91284977的博客 171

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

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

2401_85083137的博客 335

HarmonyOS 分布式深度:跨端迁移、数据对象与多设备协同

本文深入解析鸿蒙分布式能力实战,聚焦跨端迁移、协同与共享三大形态,详解权限配置、设备发现、onContinue状态管理及分布式数据对象、KV同步机制。强调“先分清场景”“前置条件必全”“数据需重验”,揭示迁移失败、同步失效等七大常见坑,指导开发者规避陷阱,实现真实可用的多设备协同。

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

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

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

程序猿追的博客 251

HarmonyOS 7 新特性14:音频编创深潜——12节点格式契约、7链时延表与EQ不设参引发的系统库崩溃

本文深度剖析HarmonyOS 7音频编创系统中12类节点的格式契约与链式处理机制,揭示因未设置均衡器增益参数导致系统库崩溃的核心问题。通过7条链路实测,验证降噪节点引入约3秒延迟,音源分离首测成功(耗时14.6秒),并发现格式契约存在软约束(如降噪输出强制16k/1ch但系统静默容忍错误配置)。研究确认:节点格式由链尾决定,需动态查表配置;均衡器等节点必须调用参数接口初始化缓冲,否则触发不可捕获的SIGSEGV。

轻口味的专栏 216

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

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

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

脱离 IDE 的自动化构建 HarmonyOS 7 CI/CD 签名与打包流水线

每次发版前,都要在本地打包、重命名、上传到测试平台,不仅浪费时间,还极容易因为手滑拿错版本。配合上代码混淆(Obfuscation),即使被人反编译,也抓不到你的真实接口地址。这要求你在 GitLab 的 CI/CD 变量里,把密码加密存储,并在流水线脚本里通过环境变量注入。在流水线环境中,守护进程会导致文件句柄无法释放,下一次构建时直接报错文件被占用。没问题,但在流水线上跑,极其容易报 Node.js 版本不兼容或者找不到模块。拉取依赖时,如果配置了私有仓库,可能需要凭证。不要用 IDE,打开终端,用。

2602_97267507的博客 229
上一篇: 我做了一个「把走路变成探索面积」的iOS App——成就系统的数据建模:为什么我把用户状态抽成一个纯值快照
下一篇: 我用 ArkUI + SwiftUI 做了一个精力电量 App,记 +20 跑步,记 -30 三小时会议
SameX-4869
博客等级 码龄17年 3354粉丝 657原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值