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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。