Skip to content

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)清理任务因严重错误中断(如权限被收回)。

运行行为

  1. 扫描范围:SDK 会遍历在 initBundle 中指定的 KEY_RUNTIME_STORAGE_PATH_CACHE 等临时存储路径。
  2. 访问时间判断:基于文件系统的 lastAccessTime(最后一次访问时间)进行比对。
  3. 递归清理:如果某个文件夹内的所有文件都已过期,SDK 会尝试连同空文件夹一并删除。
  4. 避让机制:若文件当前正被占用(例如游戏正在运行并读取该资源),删除操作可能会跳过该文件或通过 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()