Safe Haven 缓存优化,图片磁盘缓存避免重复下载
Safe Haven 客户端的缓存策略
Safe Haven 的索引同步用 BITS 协议做增量(七滚动窗口),网络请求已经很省了。缓存主要优化两个方面:
- 应用图标和截图(网络消耗大户)
- 界面渲染(滑动流畅度和分类切换速度)
图片磁盘缓存
v2.0.7 的一个重要更新:"Haven now stores cached images on disk, which helps increase load times."(Safe Haven 现在把缓存图片存到磁盘,帮助提升加载速度。)
在 v2.0.7 之前,图片缓存在内存里——应用退出或被系统回收后缓存就丢了,下次重新打开又要重新下载。v2.0.7 改成磁盘缓存:
- 图片下载后存到 Android 的应用私有目录(不会被其他应用访问)
- 下次打开同一个应用详情页,如果缓存文件还在,直接从本地读,不发网络请求
- 缓存目录占用空间由系统管理(Android 会在存储空间不足时清理应用私有目录)
磁盘缓存的好处:
- 重复打开同一个应用 → 图片瞬间加载,不需要等网络
- 流量节省 → 离线时也能浏览已经打开过的应用详情页
- 省电 → 减少网络请求 = 减少无线模块唤醒次数
分类切换防抖
早期版本(v2.0.7 之前)在分类切换时会重新渲染轮播图组件,导致分类切换时卡顿甚至冻住("Catalogue lag/freeze when switching categories was mostly caused by the repeated creation of the carousel")。
v2.0.7 的修复:轮播图只在"For You"首页出现,分类页不再渲染轮播图。这个设计改动小,但彻底解决了分类切换的卡顿——现在切分类是纯本地索引过滤,瞬间完成。
启动速度优化
启动延迟是早期版本的另一个问题("Tap-to-startup delay caused by my custom boot implementation")。修复方案:
- 放弃自定义的 boot 实现
- 改用 Flutter 官方的
flutter_native_splash包 - 配合图片磁盘缓存,冷启动从"几秒"优化到"1 秒左右"
Flutter Native Splash 在应用启动时显示一个自定义的原生闪屏页,同时 Flutter 引擎在后台初始化。用户看到的闪屏 → 看到应用主界面的过渡时间大大缩短。
后台轮询和重启恢复
早期版本还有一个 bug:Safe Haven 的后台轮询(检查更新)在设备重启后不会自动恢复("Safe Haven's attempt at waking up post boot")。Flawless Updates 设置虽然开了,但重启后没生效。
修复后,Safe Haven 在开机时自动启动后台轮询——不需要用户手动打开一次应用。这对 Flawless Updates 功能很关键,特别是 Lite 模式(每 6 小时后台检查一次)。
Flawless Updates 的三种模式
自动更新的三档设置和网络/缓存优化直接相关:
| 模式 | 网络消耗 | 电池消耗 | 说明 |
|---|---|---|---|
| Off | 零 | 零 | 完全手动 |
| Lite | 低(每 6h 一次索引同步 + 有更新才下载 APK) | 低 | 后台 6 小时检查 |
| Full | 中(Lite + 前台打开时也检查) | 中 | 后台 + 前台 |
Lite 模式每 6 小时拉一次增量索引(BITS 协议,数据量小),有更新才下载 APK(大文件)。磁盘缓存的图片在所有模式下都有效。
缓存清理
在设置页有一个"清除缓存"选项:
- 清除磁盘上的图片缓存
- 清除临时下载的 APK 文件
- 清除 BITS 索引缓存
清除后不会丢失用户配置(Flawless Updates 设置、语言等),只是下次打开应用时需要重新同步索引和重新下载图片。
存储空间
Safe Haven 客户端本身的安装包约 22.6 MB(APK),运行时数据 + 图片缓存通常在 50-200 MB 之间,取决于你打开了多少应用详情页。Android 系统会在存储空间紧张时自动清理应用缓存,但你也可以手动在设置页清理。