Safe Haven 中文文档 下载 App

Safe Haven 缓存优化,图片磁盘缓存避免重复下载

Safe Haven 客户端的缓存策略

Safe Haven 的索引同步用 BITS 协议做增量(七滚动窗口),网络请求已经很省了。缓存主要优化两个方面:

  1. 应用图标和截图(网络消耗大户)
  2. 界面渲染(滑动流畅度和分类切换速度)

图片磁盘缓存

v2.0.7 的一个重要更新:"Haven now stores cached images on disk, which helps increase load times."(Safe Haven 现在把缓存图片存到磁盘,帮助提升加载速度。)

在 v2.0.7 之前,图片缓存在内存里——应用退出或被系统回收后缓存就丢了,下次重新打开又要重新下载。v2.0.7 改成磁盘缓存:

磁盘缓存的好处:

分类切换防抖

早期版本(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")。修复方案:

  1. 放弃自定义的 boot 实现
  2. 改用 Flutter 官方的 flutter_native_splash 包
  3. 配合图片磁盘缓存,冷启动从"几秒"优化到"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(大文件)。磁盘缓存的图片在所有模式下都有效。

缓存清理

在设置页有一个"清除缓存"选项:

清除后不会丢失用户配置(Flawless Updates 设置、语言等),只是下次打开应用时需要重新同步索引和重新下载图片。

存储空间

Safe Haven 客户端本身的安装包约 22.6 MB(APK),运行时数据 + 图片缓存通常在 50-200 MB 之间,取决于你打开了多少应用详情页。Android 系统会在存储空间紧张时自动清理应用缓存,但你也可以手动在设置页清理。