android清理缓存功能吗,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

*/

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实现清理缓存功能所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值