You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oxygen OS 13下Flutter应用本地缓存意外丢失问题求助

OnePlus 8T Oxygen OS 13下Flutter应用缓存被清理问题解决方案

问题根因

这是Oxygen OS 13定制系统新增的后台自动缓存清理机制导致的,属于OnePlus机型的特有定制行为,和Android 13原生系统无关——这也是你在其他Android 13设备(如Realme GT)上功能正常的原因。

解决办法

1. 替换缓存存储目录

放弃使用Flutter默认的临时缓存目录(getTemporaryDirectory()),改用应用私有持久化目录:

import 'package:path_provider/path_provider.dart';

// 获取应用专属文档目录,系统不会主动清理
final dir = await getApplicationDocumentsDirectory();
final saveDir = '${dir.path}/app_media_cache';
// 确保目录存在
await Directory(saveDir).create(recursive: true);

该目录属于应用私有空间,只有用户手动清除应用数据或卸载时才会被删除。

2. 关闭OnePlus系统的自动清理开关

进入OnePlus 8T的系统设置,完成以下配置:

  • 「设置 > 电池 > 智能省电」:将你的应用设为无限制,避免后台被系统杀死导致缓存未写入完成
  • 「设置 > 存储 > 存储优化」:找到你的应用,关闭自动清理缓存选项
  • 「手机管家 > 应用管理 > 权限」:开启应用的存储持久化权限(部分机型有此选项)

3. 长视频录制的临时文件处理

如果录制过程必须使用临时目录,需在录制完成后立即转移文件到持久化目录:

// 录制完成后转移文件
final tempVideoFile = File('/data/user/0/com.your.app/cache/temp_video.mp4');
final targetFile = File('$saveDir/recorded_video.mp4');
// 先复制再删除临时文件,避免中途被系统清理
await tempVideoFile.copy(targetFile.path);
await tempVideoFile.delete();

4. 关键缓存数据的冗余备份

对已生成的图片等关键缓存,可在写入后额外备份一份到持久化目录,防止临时缓存被清理后丢失:

// 保存图片时同时备份
final cacheImage = File(tempCachePath);
final backupImage = File('$saveDir/backup_${DateTime.now().millisecondsSinceEpoch}.png');
await cacheImage.copy(backupImage.path);

验证流程

  1. 更换存储目录后,测试图片保存和长视频录制功能
  2. 重启设备或等待24小时(触发系统自动清理周期),检查数据是否留存
  3. 确认系统设置中的自动清理开关已关闭

内容的提问来源于stack exchange,提问作者Alesss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 02:15:34