纪念日
不只是倒数日,是两个人留在桌面上的一个小世界。
一款完全离线的 Android 纪念日应用:围绕相处天数、重要日期、温柔提醒、桌面小组件和完整备份,做成可以长期留在两个人手机里的私人空间。
- Kotlin
- Jetpack Compose
- Room
- DataStore
- AlarmManager
- RemoteViews
- Android

01 / CONTEXT
背景
许多倒数日工具只留下一个标题、一串日期和一个数字。纪念日从相反的方向开始:日期只是骨架,真正被记住的,是两个人如何称呼彼此、一起过了多久、想怎样度过每一个普通日子。
所以它不是给通用日期列表换上粉色皮肤,而是把关系、日期和每天会打开看到的小细节放在同一个产品里。首页的相处天数、生日与节日卡片就是这个取舍最直接的呈现。
02 / CHALLENGE
挑战
算出剩余天数并不难,难的是提醒要在应用退出、设备休眠、重启和系统时间变化后仍能恢复到合理状态;小组件还要受 RemoteViews 限制,兼顾不同尺寸下的可读性。
另一个挑战来自隐私。纪念日、头像和背景都是私人信息,项目不希望为了一个日期提醒就强迫使用者注册账号或把资料上传到未知服务器。
03 / ARCHITECTURE
方案与选型
界面采用 Jetpack Compose,业务状态由各页面 ViewModel 协调;Room 保存纪念日、提醒和计时数据,DataStore 保存主题、称呼、暖心问候和组件偏好,头像与背景则复制进应用私有目录。
提醒不只依赖单一系统回调:AlarmManager 负责到点计划,显式 Receiver 接收事件,Worker 用于兜底和恢复;设备重启、时间或时区变化后重新安排。桌面组件通过 RemoteViews 提供一个无需先打开 App 的日常入口。
SYSTEM_MAP / ANNIVERSARY
本地优先的纪念日应用架构
所有核心数据保留在设备本地。界面状态、日期计算、通知计划、桌面组件和备份恢复各有明确边界,换机时通过可校验备份迁移,而不是依赖账号和云端服务。
- 01
界面与状态层
Compose 页面配合 ViewModel 管理首页、编辑、详情与设置,把日期与个性化状态及时反映在界面上。
- Jetpack Compose
- Navigation
- HomeViewModel
- DetailViewModel
- SettingsViewModel
- 02
本地数据层
结构化纪念日数据、偏好设置和私有图片分别存放,避免把简单的主题配置和需要查询的业务数据混在一起。
- Room
- Anniversary / Reminder / Counter
- DataStore
- PersonalizationStorage
- Private files
- 03
提醒与桌面入口
提醒计划在系统闹钟、Receiver 和兜底 Worker 之间协作;桌面组件使用 RemoteViews,并在重启或时间变化后重新恢复计划。
- AlarmManager
- BroadcastReceiver
- WorkManager fallback
- RemoteViews Widget
- Boot recovery
- 04
备份与恢复
完整备份覆盖数据库、偏好和私有图片。恢复前检查清单、路径、大小、条目和 SHA-256,确认安全后再写入。
- ZIP manifest
- SHA-256
- Safe entry checks
- Room transaction
- Rollback
04 / DIFFERENCE
它和常见提醒日软件有什么不同
第一,产品围绕关系叙事而不是日期列表:双方称呼与头像、在一起第 N 天、每日问候、早晚随机暖心话和零点提醒,构成了一条统一的日常体验。
第二,本地优先。应用清单不申请 INTERNET 权限,核心数据不离开设备;换机时使用可以校验的完整 ZIP 备份来迁移 Room、DataStore 和私有图片,而不是把登录和云同步当成唯一答案。
第三,小组件不是附赠。它可以选择展示纪念日或相处计时,并继续调整材质、字体、透明度、头像和信息密度,让最常看的入口仍然带有个人气质。
05 / CURRENT_STATE
当前状态
当前版本为 v0.6.0。这里展示的是实际 Android 界面:首页的相处天数与日期卡片、单个纪念日提醒、主题设置,以及情侣资料与背景配置;四张图连起来就是一条完整使用路径。
目前这个项目不把尚未确认的事项包装成完成结果。提醒在不同系统的到点表现、更多小组件尺寸和跨机型回归都还值得持续做,这种明确边界比一串无法证明的“成果数字”更可靠。
INTERFACE_LOG
纪念日 的真实界面
这里展示开发过程中的实际产品截图,用来说明功能与交互,而不是用概念图代替已经完成的界面。




VERIFIED_METRICS
当前可核对的工程结果
- APP VERSION
- v0.6.0
- Android 本地版本号
- TEST FILES
- 21
- 当前 JVM 测试源码文件
- NETWORK PERMISSION
- NONE
- Manifest 未声明 INTERNET
- DATA STRATEGY
- LOCAL
- Room / DataStore / Private files