cleanUpExpiredTemporaryFiles
清除过期临时文件
cleanUpExpiredTemporaryFiles 方法用于维护 SDK 的磁盘健康。它通过扫描特定的存储路径,识别并删除超过指定“保留时间”未被访问的临时资源。
该操作是异步执行的,建议在应用闲置或非游戏运行期间调用,以避免占用 I/O 带宽。
方法声明
java
/**
* 清除过期临时文件
* * @param keepTimeInMinute 临时文件保留时间,单位为分钟。
* 计算规则:(当前时间 - 文件最后一次访问时间) > keepTimeInMinute,则删除。
* @param listener 状态监听器,可传 null
*/
void cleanUpExpiredTemporaryFiles(
int keepTimeInMinute,
SUDRTGameRuntime.CleanUpExpiredTemporaryFilesListener listener
);参数说明
1. keepTimeInMinute (保留时长)
- 类型:
int - 说明:定义文件“过期”的标准。
- 常用值建议:
60:保留 1 小时内访问过的文件。1440:保留 24 小时(1天)内访问过的文件。10080:保留 7 天内访问过的文件。
2. CleanUpExpiredTemporaryFilesListener
用于追踪清理任务的进度和结果:
| 回调方法 | 触发时机 |
|---|---|
| onCleanUpStart() | 清理任务正式启动时回调。 |
| onRemove(String path, Throwable exception) | 每成功删除一个文件或文件夹,或删除出错时回调。 |
| onSuccess() | 整个扫描和清理任务圆满完成。 |
| onFailure(Throwable throwable) | 清理任务因严重错误中断(如权限被收回)。 |
运行行为
- 扫描范围:SDK 会遍历在
init或Bundle中指定的KEY_RUNTIME_STORAGE_PATH_CACHE等临时存储路径。 - 访问时间判断:基于文件系统的
lastAccessTime(最后一次访问时间)进行比对。 - 递归清理:如果某个文件夹内的所有文件都已过期,SDK 会尝试连同空文件夹一并删除。
- 避让机制:若文件当前正被占用(例如游戏正在运行并读取该资源),删除操作可能会跳过该文件或通过
exception反馈。
代码示例
java
// 设置保留 24 小时内的临时文件
int keepOneDay = 24 * 60;
runtime.cleanUpExpiredTemporaryFiles(keepOneDay, new SUDRTGameRuntime.CleanUpExpiredTemporaryFilesListener() {
@Override
public void onCleanUpStart() {
Log.d("SUDOP", "Disk cleanup started...");
}
@Override
public void onRemove(String path, Throwable exception) {
if (exception == null) {
Log.d("SUDOP", "Removed: " + path);
} else {
Log.e("SUDOP", "Failed to remove: " + path + ", error: " + exception.getMessage());
}
}
@Override
public void onSuccess() {
Log.i("SUDOP", "Cleanup finished successfully.");
}
@Override
public void onFailure(Throwable throwable) {
Log.e("SUDOP", "Cleanup failed: " + throwable.getMessage());
}
});注意事项
- 性能影响:大范围的文件扫描会产生磁盘 I/O。如果在游戏加载或运行过程中调用,可能会导致掉帧。
- 不可逆性:文件一旦被删除将无法恢复,必须重新下载或生成。
- 配合使用:如果需要立即中止清理任务,请配合调用
cancelCleanUp()。