android实现清理缓存功能
程序员文章站
2023-09-06 16:33:57
android之清理缓存实现,供大家参考,具体内容如下
一. 清理缓存首先要搞清楚清理哪些东西
1、app本身的功能比如录像,录音,更新都会产生文件,需要清理
2、app的默认缓...
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缓存
/** * 获取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; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Unity实现UI渐变效果
下一篇: 朱允炆被立为皇太孙,真的是朱元璋在赌吗?