android實(shí)現(xiàn)清理緩存功能
android之清理緩存實(shí)現(xiàn),供大家參考,具體內(nèi)容如下
一. 清理緩存首先要搞清楚清理哪些東西
1、app本身的功能比如錄像,錄音,更新都會(huì)產(chǎn)生文件,需要清理
2、app的默認(rèn)緩存地址cache
二. 搞清楚要清理的文件夾位置
1、首先app自身的功能就要看自己把它放在了什么位置
2、默認(rèn)緩存地址:getActivity().getExternalCacheDir();
這個(gè)位置是在storage/emulated/0/Android/data/com.xxxxxapp/cache
三.代碼功能模塊:
1、獲取app緩存大小,以字節(jié)為單位
2、獲取某個(gè)文件夾的大小,以字節(jié)為單位
3、把字節(jié)單位換算成常用單位
4、把緩存大小設(shè)置到頁面,清理前一次,清理后一次
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());//這行是默認(rèn)的緩存地址,看圖片什么的會(huì)在這里積累緩存
fileSize += getDirSize(videoDir);
fileSize += getDirSize(radioDir);
fileSize += getDirSize(filesDir);
fileSize += getDirSize(cacheDir);
String fileSizeStr = formatFileSize(fileSize);
Log.d(TAG, "getAppCache: 總緩存大小: "+fileSizeStr);
return fileSizeStr;
}
/**
* 獲取文件大小(字節(jié)為單位)
* @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();//文件的長(zhǎng)度就是文件的大小
} else if (file.isDirectory()) {
dirSize += file.length();
dirSize += getDirSize(file); // 遞歸調(diào)用繼續(xù)統(tǒng)計(jì)
}
}
return dirSize;
}
/**
* 格式化文件長(zhǎng)度
* @param fileSize
* @return
*/
private String formatFileSize(long fileSize){
DecimalFormat df = new DecimalFormat("#0.00");//表示小數(shù)點(diǎn)前至少一位,0也會(huì)顯示,后保留兩位
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: 當(dāng)前緩存"+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 當(dāng)前系統(tǒng)時(shí)間
*/
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;
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持我們。
上一篇:Android實(shí)現(xiàn) Shape屬性gradient 漸變效果
欄 目:Android
下一篇:基于SceneForm實(shí)現(xiàn)子彈射擊(繪制子彈運(yùn)行軌跡)
本文標(biāo)題:android實(shí)現(xiàn)清理緩存功能
本文地址:http://www.jygsgssxh.com/a1/Android/9061.html
您可能感興趣的文章
- 01-10Android自定義View之繪制圓形頭像功能
- 01-10Android實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用實(shí)現(xiàn)方法詳解
- 01-10android實(shí)現(xiàn)記住用戶名和密碼以及自動(dòng)登錄
- 01-10android實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
- 01-10Android 友盟第三方登錄與分享的實(shí)現(xiàn)代碼
- 01-10C++自定義API函數(shù)實(shí)現(xiàn)大數(shù)相乘算法
- 01-10如何給Flutter界面切換實(shí)現(xiàn)點(diǎn)特效
- 01-10android實(shí)現(xiàn)指紋識(shí)別功能
- 01-10Emoji表情在Android JNI中的兼容性問題詳解
- 01-10Android實(shí)現(xiàn)圓形漸變加載進(jìn)度條


閱讀排行
- 1C語言 while語句的用法詳解
- 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
- 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
- 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
- 5c語言計(jì)算三角形面積代碼
- 6什么是 WSH(腳本宿主)的詳細(xì)解釋
- 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
- 8正則表達(dá)式匹配各種特殊字符
- 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
- 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
本欄相關(guān)
- 01-10Android自定義View之繪制圓形頭像功能
- 01-10Android實(shí)現(xiàn)雙擊返回鍵退出應(yīng)用實(shí)現(xiàn)方
- 01-10android實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能
- 01-10android實(shí)現(xiàn)記住用戶名和密碼以及自動(dòng)
- 01-10C++自定義API函數(shù)實(shí)現(xiàn)大數(shù)相乘算法
- 01-10Android 友盟第三方登錄與分享的實(shí)現(xiàn)代
- 01-10android實(shí)現(xiàn)指紋識(shí)別功能
- 01-10如何給Flutter界面切換實(shí)現(xiàn)點(diǎn)特效
- 01-10Android實(shí)現(xiàn)圓形漸變加載進(jìn)度條
- 01-10Emoji表情在Android JNI中的兼容性問題詳
隨機(jī)閱讀
- 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
- 01-10delphi制作wav文件的方法
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 04-02jquery與jsp,用jquery
- 01-10C#中split用法實(shí)例總結(jié)
- 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 01-10使用C語言求解撲克牌的順子及n個(gè)骰子


