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);
验证流程
- 更换存储目录后,测试图片保存和长视频录制功能
- 重启设备或等待24小时(触发系统自动清理周期),检查数据是否留存
- 确认系统设置中的自动清理开关已关闭
内容的提问来源于stack exchange,提问作者Alesss
相关产品推荐
相关产品推荐

