Android開發:計算快取大小並且清空快取
阿新 • • 發佈:2018-11-20
專案中碰到了計算快取大小和清空快取的功能,這個很常見的功能,幾乎每個APP都有,以為實現很簡單,網上搜了一大堆,發現都不是符合我需要的,而且經常刪除的沒有效果,於是又另外找了一些資料,折騰了蠻久,終於完成了
以下的這個類的功能很簡單,計算你的快取總大小,不管內部快取還是外部快取,和清空快取,包括內部和外部的快取一起清空,請本人親測,效果槓槓的。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
public
class
DataCleanManager {
public
static
String getTotalCacheSize(Context context)
throws Exception {
long
cacheSize = getFolderSize(context.getCacheDir());
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
cacheSize += getFolderSize(context.getExternalCacheDir());
}
return
getFormatSize(cacheSize);
}
public
static
void
clearAllCache(Context context) {
deleteDir(context.getCacheDir());
if
(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
deleteDir(context.getExternalCacheDir());
}
}
private
static
boolean
deleteDir(File dir) {
if
(dir !=
null
&& dir.isDirectory()) {
String[] children = dir.list();
for
(
int
i =
0
; i < children.length; i++) {
boolean
success = deleteDir(
new
File(dir, children[i]));
if
(!success) {
return
false
;
}
}
}
return
dir.delete();
}
// 獲取檔案
//Context.getExternalFilesDir() --> SDCard/Android/data/你的應用的包名/files/ 目錄,一般放一些長時間儲存的資料
//Context.getExternalCacheDir() --> SDCard/Android/data/你的應用包名/cache/目錄,一般存放臨時快取資料
public
static
long
getFolderSize(File file)
throws
Exception {
long
size =
0
;
try
{
File[] fileList = file.listFiles();
for
(
int
i =
0
; i < fileList.length; i++) {
// 如果下面還有檔案
if
(fileList[i].isDirectory()) {
size = size + getFolderSize(fileList[i]);
}
else
{
size = size + fileList[i].length();
}
}
}
catch
(Exception e) {
e.printStackTrace();
}
return
size;
}
/**
* 格式化單位
*
* @param size
* @return
*/
public
static
String getFormatSize(
double
size) {
double
kiloByte = size /
1024
;
if
(kiloByte <
1
) {
// return size + "Byte";
return
"0K"
;
}
double
megaByte = kiloByte /
1024
;
if
(megaByte <
1
) {
BigDecimal result1 =
new
BigDecimal(Double.toString(kiloByte));
return
result1.setScale(
2
, BigDecimal.ROUND_HALF_UP)
.toPlainString() +
"KB"
;
}
double
gigaByte = megaByte /
1024
;
if
(gigaByte <
1
) {
BigDecimal result2 =
new
BigDecimal(Double.toString(megaByte));
return
result2.setScale(
2
, BigDecimal.ROUND_HALF_UP)
.toPlainString() +
"MB"
;
}
double
teraBytes = gigaByte /
1024
;
if
(teraBytes <
1
) {
BigDecimal result3 =
new
BigDecimal(Double.toString(gigaByte));
return
result3.setScale(
2
, BigDecimal.ROUND_HALF_UP)
.toPlainString() +
"GB"
;
}
BigDecimal result4 =
new
BigDecimal(teraBytes);
return
result4.setScale(
2
, BigDecimal.ROUND_HALF_UP).toPlainString()
+
"TB"
;
}
}
|
當你在專案中需要查下快取大小,就使用getTotalCacheSize(Context)方法,清空快取,就使用clearAllCache(Context)方法