use access time to remove old cache files >= android-21
In android-21, they exposed the formerly internal method for getting stat structs of files. From that, we can get the last access time, which is a much better way to determine which files to delete rather than last modified time. closes #644
This commit is contained in:
parent
6204a16024
commit
28dfe970da
@ -141,12 +141,15 @@ public class ApkCache {
|
||||
}
|
||||
|
||||
/**
|
||||
* Recursively delete files in {@code dir} that were last modified
|
||||
* {@code secondsAgo} seconds ago, e.g. when it was downloaded.
|
||||
* Recursively delete files in {@code dir} that were last used
|
||||
* {@code secondsAgo} seconds ago. On {@code android-21} and newer, this
|
||||
* is based on the last access of the file, on older Android versions, it is
|
||||
* based on the last time the file was modified, e.g. downloaded.
|
||||
*
|
||||
* @param dir The directory to recurse in
|
||||
* @param secondsAgo The number of seconds old that marks a file for deletion.
|
||||
*/
|
||||
@TargetApi(21)
|
||||
public static void clearOldFiles(File dir, long secondsAgo) {
|
||||
if (dir == null) {
|
||||
return;
|
||||
@ -161,8 +164,19 @@ public class ApkCache {
|
||||
clearOldFiles(f, olderThan);
|
||||
f.delete();
|
||||
}
|
||||
if (FileUtils.isFileOlder(f, olderThan)) {
|
||||
f.delete();
|
||||
if (Build.VERSION.SDK_INT < 21) {
|
||||
if (FileUtils.isFileOlder(f, olderThan)) {
|
||||
f.delete();
|
||||
}
|
||||
} else {
|
||||
try {
|
||||
StructStat stat = Os.lstat(f.getAbsolutePath());
|
||||
if (stat.st_atime < olderThan) {
|
||||
f.delete();
|
||||
}
|
||||
} catch (ErrnoException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user