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缓存
/** *获取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 */ FilevideoDir,radioDir,filesDir,cacheDir; privateStringgetAppCache(){ longfileSize=0; StringcacheSize="0KB"; videoDir=newFile(Environment.getExternalStorageDirectory()+"/xueliangapp/video"); Log.d(TAG,"getAppCache:videoDir大小:"+getDirSize(videoDir)); radioDir=newFile(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); StringfileSizeStr=formatFileSize(fileSize); Log.d(TAG,"getAppCache:总缓存大小:"+fileSizeStr); returnfileSizeStr; } /** *获取文件大小(字节为单位) *@paramdir *@return */ privatelonggetDirSize(Filedir){ if(dir==null){ return0; } if(!dir.isDirectory()){ return0; } longdirSize=0; File[]files=dir.listFiles(); for(Filefile:files){ if(file.isFile()){ dirSize+=file.length();//文件的长度就是文件的大小 }elseif(file.isDirectory()){ dirSize+=file.length(); dirSize+=getDirSize(file);//递归调用继续统计 } } returndirSize; } /** *格式化文件长度 *@paramfileSize *@return */ privateStringformatFileSize(longfileSize){ DecimalFormatdf=newDecimalFormat("#0.00");//表示小数点前至少一位,0也会显示,后保留两位 StringfileSizeString=""; if(fileSize<1024){ fileSizeString=df.format((double)fileSize)+"B"; }elseif(fileSize<1048576){ fileSizeString=df.format((double)fileSize/1024)+"KB"; }elseif(fileSize<1073741824){ fileSizeString=df.format((double)fileSize/1048576)+"MB"; }else{ fileSizeString=df.format((double)fileSize/1073741824)+"G"; } returnfileSizeString; } privatevoidsetAppCache(){ StringfileSize=getAppCache(); fileSizeTv.setText(fileSize); Log.d(TAG,"setAppCache:重新显示缓存大小"); Log.d(TAG,"setAppCache:当前缓存"+fileSize); } publicvoidclearAppCache(finalActivityactivity){ finalHandlerhandler=newHandler(){ @Override publicvoidhandleMessage(@NonNullMessagemsg){ 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:缓存清除失败"); } } }; newThread(newRunnable(){ @Override publicvoidrun(){ Log.d(TAG,"run:"); Messagemsg=newMessage(); try{ clearCacheFolder(videoDir,System.currentTimeMillis()); clearCacheFolder(radioDir,System.currentTimeMillis()); clearCacheFolder(filesDir,System.currentTimeMillis()); clearCacheFolder(cacheDir,System.currentTimeMillis()); msg.what=1; }catch(Exceptione){ e.printStackTrace(); msg.what=-1; } handler.sendMessage(msg); } }).start(); } /** *清除缓存目录 *@paramdir目录 *@paramcurTime当前系统时间 */ privateintclearCacheFolder(Filedir,longcurTime){ intdeletedFiles=0; if(dir!=null&&dir.isDirectory()){ try{ for(Filechild:dir.listFiles()){ if(child.isDirectory()){ deletedFiles+=clearCacheFolder(child,curTime); } if(child.lastModified()以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。