android 清理缓存功能 的实现,android实现清理缓存功能

本文详细介绍了Android应用程序中如何实现缓存清理功能,包括清理录像、录音、更新产生的文件,以及默认缓存地址。通过获取各文件夹大小,转换单位并展示在页面上,最后提供清除文件夹的代码实现,帮助开发者实现缓存清理功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值