# 缓存网络与空间检查

2026-10-04。已修改 juku-mobile 业务代码；不是新的设计稿。Web/API 协议、额度账本和认证未改。本轮未发布 App、OTA 或业务站点。

## 用户行为

缓存选集页默认勾选“仅 Wi-Fi 缓存”，可主动关闭；显示手机当前可用空间。确认前重新读取空间，不足时关闭确认框、保留选集并显示“管理缓存”。没有确认成功的订单不会显示成已下载。

订单记录保存网络选择。等待 Wi-Fi、断网、低空间等状态保留队列，条件恢复后继续调度。开始申请许可前及交给原生下载前各检查一次；前一次不足不会申请许可。后一次变化时保留已签发记录，恢复使用原资产，不新建一次扣费操作。

`offlineResourceIssue(resources, wifiOnly, pendingBytes, reserveBytes)` 为可导入函数，默认预留128 MiB，并计入已开始任务的已知剩余字节。空间读取复用已安装的 Expo FileSystem `Paths.availableDiskSpace`，网络复用 Expo Network。视频大小未知时只能检查开工余量，不能保证整集一定放得下；下载过程的磁盘写入失败仍由原生下载器报告。100集/2GB总容量与完整大小估算尚未完成；画质偏好已接通，见下方最新记录。

## 原生接入与兼容

Android 复用 [Media3 下载停止原因](https://developer.android.com/media/media3/exoplayer/downloading-media)：Wi-Fi 等待与账号锁定、手动暂停分别处理。网络回调调整每个任务，取媒体时再检查；Wi-Fi 恢复不会解除用户手动暂停，也不会为邻近任务开放蜂窝网络。离线文件播放不需要 Wi-Fi。

iOS 为 HLS/MP4 保留旧系统会话，并新增禁止蜂窝访问的后台会话，使用 [URLSessionConfiguration.allowsCellularAccess](https://developer.apple.com/documentation/foundation/urlsessionconfiguration/allowscellularaccess)。网络选择进入原生订单并在恢复时匹配对应会话。旧订单继续沿用原设置，不把旧的无限制任务显示为新的 Wi-Fi 任务。系统后台完成事件仍需在真实 iOS 宿主与设备验收。

RN 下载调用新原生入口 `enqueueWithPolicy`。旧安装包不存在这个方法时，在申请许可前停止，避免忽略设置后使用手机流量。`runtimeVersion` 已从4改为5；需要重新编译安装包，不能给旧原生包仅发JS更新。此前的runtime4测试APK不包含本轮改动。

## 验证

| 检查 | 结果与实际范围 |
| --- | --- |
| App | 全量313/313，类型检查通过；新增9组涵盖Wi-Fi选择、低/未知空间、许可中途条件变化、已知待写字节、取消竞态、旧安装包、持久化及实际React页面 |
| Android | 实际Media3/SQLite/缓存组件22/22；媒体传输及网络类型为明确夹具，新增3组，不等于真机蜂窝切换 |
| iOS | 实际macOS Foundation/AVFoundation编译及124项检查；新增5项检查配置与持久记录，无iOS系统后台任务或手机验证 |
| 页面 | 实际RN源码经react-native-web在Chrome渲染，8个原有状态及6个新增状态；API、磁盘容量、原生索引和导航为明确适配器 |
| 代码包 | Android/iOS Hermes导出通过；不是完整APK或iOS安装包 |
| 补丁 | 在干净react-native-video 6.19.2应用，21个源文件与开发目录一致，不包含构建产物 |

本轮由主实现者复查并修正：低空间提示被确认弹窗遮挡、取消时资源读取迟到、旧订单与旧安装包兼容。没有新增独立子Agent审核，不沿用旧审查结果声称本轮独立复审通过。

[选集页面](offline-app-preview/select-zh.png) · [低空间](offline-app-preview/low-space-zh.png) · [等待Wi-Fi](offline-app-preview/waiting-wifi-en.png)。截图含示例数据；不代表正式渠道已连通。

验证日志：`offline-resources-app-full.log`、`offline-resources-typecheck.log`、`offline-resources-android-native.log`、`offline-resources-ios-build.log`、`offline-resources-ios-checks.json`、`offline-resources-browser-checks.json`。均在工作目录 `work/existing-project/`。

## 最新清晰度开发

2026-10-04：自动/720p/480p已接入选择、订单和原生选轨；当前入口为enqueueWithOptions，要求runtime6新包。平台254/App319/Android24/macOS SDK141项检查通过；此前runtime5网络功能记录为历史结果。[实现与验证](dramivio-offline-quality-development.md)。
