我是靠谱客的博主 震动蜗牛,这篇文章主要介绍android实现清理缓存功能,现在分享给大家,希望可以做个参考。

android之清理缓存实现,供大家参考,具体内容如下

一. 清理缓存首先要搞清楚清理哪些东西

1、app本身的功能比如录像,录音,更新都会产生文件,需要清理
2、app的默认缓存地址cache

二. 搞清楚要清理的文件夹位置

1、首先app自身的功能就要看自己把它放在了什么位置
2、默认缓存地址:getActivity().getExternalCacheDir();
这个位置是在storage/emulated/0/Android/data/com.xxxxxapp/cache

三.代码功能模块:

1、获取app缓存大小,以字节为单位
2、获取某个文件夹的大小,以字节为单位
3、把字节单位换算成常用单位
4、把缓存大小设置到页面,清理前一次,清理后一次
5、删除文件夹功能
6、清除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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/** * 获取app的缓存大小 * 1. 录制的视频/storage/emulated/0/xueliangapp/video/1573972925136.mp4 * 2. 录制的音频/storage/emulated/0/xueliangapp/radio/1573972925136.amr * 3. 下载的更新包/storage/emulated/0/Android/data/com.sdxzt.xueliangapp_v3/files/Download/xueliang_update.apk * 4. 缓存/storage/emulated/0/Android/data/com.sdxzt.xueliangapp_v3/cache */ File videoDir,radioDir,filesDir,cacheDir; private String getAppCache(){ long fileSize = 0; String cacheSize = "0KB"; videoDir = new File(Environment.getExternalStorageDirectory()+"/xueliangapp/video"); Log.d(TAG, "getAppCache: videoDir大小: "+getDirSize(videoDir)); radioDir = new File(Environment.getExternalStorageDirectory()+"/xueliangapp/radio"); Log.d(TAG, "getAppCache: radioDir大小: "+getDirSize(radioDir)); filesDir = getActivity().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS); Log.d(TAG, "getAppCache: filesDir大小: "+getDirSize(filesDir)); ///storage/emulated/0/Android/data/com.sdxzt.xueliangapp_v3/files,这里面有download文件夹,里面是下载的更新包 cacheDir = getActivity().getExternalCacheDir(); Log.d(TAG, "getAppCache: cacheDir大小: "+getDirSize(cacheDir)); ///storage/emulated/0/Android/data/com.sdxzt.xueliangapp_v3/cache fileSize += getDirSize(getActivity().getFilesDir()); fileSize += getDirSize(getActivity().getCacheDir());//这行是默认的缓存地址,看图片什么的会在这里积累缓存 fileSize += getDirSize(videoDir); fileSize += getDirSize(radioDir); fileSize += getDirSize(filesDir); fileSize += getDirSize(cacheDir); String fileSizeStr = formatFileSize(fileSize); Log.d(TAG, "getAppCache: 总缓存大小: "+fileSizeStr); return fileSizeStr; } /** * 获取文件大小(字节为单位) * @param dir * @return */ private long getDirSize(File dir) { if (dir == null) { return 0; } if (!dir.isDirectory()) { return 0; } long dirSize = 0; File[] files = dir.listFiles(); for (File file : files) { if (file.isFile()) { dirSize += file.length();//文件的长度就是文件的大小 } else if (file.isDirectory()) { dirSize += file.length(); dirSize += getDirSize(file); // 递归调用继续统计 } } return dirSize; } /** * 格式化文件长度 * @param fileSize * @return */ private String formatFileSize(long fileSize){ DecimalFormat df = new DecimalFormat("#0.00");//表示小数点前至少一位,0也会显示,后保留两位 String fileSizeString = ""; if (fileSize < 1024) { fileSizeString = df.format((double) fileSize) + "B"; } else if (fileSize < 1048576) { fileSizeString = df.format((double) fileSize / 1024) + "KB"; } else if (fileSize < 1073741824) { fileSizeString = df.format((double) fileSize / 1048576) + "MB"; } else { fileSizeString = df.format((double) fileSize / 1073741824) + "G"; } return fileSizeString; } private void setAppCache() { String fileSize = getAppCache(); fileSizeTv.setText(fileSize); Log.d(TAG, "setAppCache: 重新显示缓存大小"); Log.d(TAG, "setAppCache: 当前缓存"+fileSize); } public void clearAppCache(final Activity activity){ final Handler handler = new Handler(){ @Override public void handleMessage(@NonNull Message msg) { super.handleMessage(msg); Log.d(TAG, "handlerMessage: "); if (msg.what == 1) { setAppCache(); Log.d(TAG, "handlerMessage: 缓存清除完毕"); ToastUtil.showMsg(getActivity(),"缓存清除完毕"); }else { ToastUtil.showMsg(getActivity(),"缓存清除失败"); Log.d(TAG, "handlerMessage: 缓存清除失败"); } } }; new Thread(new Runnable() { @Override public void run() { Log.d(TAG, "run: "); Message msg = new Message(); try { clearCacheFolder(videoDir,System.currentTimeMillis()); clearCacheFolder(radioDir,System.currentTimeMillis()); clearCacheFolder(filesDir,System.currentTimeMillis()); clearCacheFolder(cacheDir,System.currentTimeMillis()); msg.what = 1; }catch (Exception e){ e.printStackTrace(); msg.what = -1; } handler.sendMessage(msg); } }).start(); } /** * 清除缓存目录 * @param dir 目录 * @param curTime 当前系统时间 */ private int clearCacheFolder(File dir,long curTime){ int deletedFiles = 0; if (dir!= null && dir.isDirectory()) { try { for (File child:dir.listFiles()) { if (child.isDirectory()) { deletedFiles += clearCacheFolder(child, curTime); } if (child.lastModified() < curTime) { if (child.delete()) { deletedFiles++; } } } } catch(Exception e) { e.printStackTrace(); } } Log.d(TAG, "clearCacheFolder: 清除目录: "+dir.getAbsolutePath()); return deletedFiles; }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持靠谱客。

最后

以上就是震动蜗牛最近收集整理的关于android实现清理缓存功能的全部内容,更多相关android实现清理缓存功能内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(128)

评论列表共有 0 条评论

立即
投稿
返回
顶部