多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > Android開發記錄20-獲取緩存大小和清除緩存功能

Android開發記錄20-獲取緩存大小和清除緩存功能

來源:程序員人生   發布時間:2015-02-07 09:12:11 閱讀次數:6818次

Android開發記錄20-獲得緩存大小和清除緩存功能


轉載請注明:IT_xiao小巫 

博客地址:http://blog.csdn.net/wwj_748

前言

本篇博客要給大家分享的如何獲得利用緩存的大小和清除緩存的功能,我們知道我們利用當中常常會產生1些數據,比如圖片的緩存,數據庫文件,配置文件等等。我們開發產品的時候,可能會有這樣的1個需求清除利用內緩存的數據,可讓用戶選擇刪除利用內產生的數據,這也是比較人性化的設計點。例如筆者參與開發的1款產品的設置界面就提供了清除緩存的功能,以下圖所示:


在貼1大段代碼之前,先普及Android的相干知識點:

先看360手機助手的1張圖:


從上面這張圖,我們可以看到這部手機有

系統文件(注:這個是系統的文件系統,不允許修改的)

內置SD卡(注:現在的手機基本上都有,就是我們所謂的ROM,是不可以移除的,RAM是我們手機的運行內存)

外置SD卡(注:這個就是我們的SD卡了,可以移除)

我們來斟酌1個問題我們利用內的緩存數據寄存在哪里?

我們的利用程序1般會產生以下幾種類型的數據:

file-普通的文件存儲

database-數據庫文件(.db文件)

sharedPreference-配置數據(.xml文件)

cache-圖片緩存文件


利用內數據的所有路徑:

/data/data/com.xxx.xxx/cache - 利用內緩存(注:對應方法getCacheDir())

/data/data/com.xxx.xxx/databases - 利用內數據庫

/data/data/com.xxx.xxx/shared_prefs - 利用內配置文件

/data/data/com.xxx.xxx/files - 利用內文件(注:對應方法getFilesDir())


1種情況,我們沒有外置SD卡,那末我們安裝的利用安裝在哪里?自然是手機中的內置SD卡里,具體路徑是這樣的:


那在Android是用甚么方法來獲得這個路徑的:


如果我們手機有外置SD卡,我們也能夠把利用安裝在SD卡,但移除SD卡以后就不能使用了。



不論是內置還是外置SD卡,獲得路徑的方法是1樣:

獲得SD卡根目錄:Environment.getExternalStorageDirectory().getAbsolutePath();

外部Cache路徑:/mnt/sdcard/android/data/com.xxx.xxx/cache 1般存儲緩存數據(注:通過getExternalCacheDir()獲得)

外部File路徑:/mnt/sdcard/android/data/com.xxx.xxx/files 存儲長時間存在的數據 (注:通過getExternalFilesDir(String type)獲得, type為特定類型,可以是以下任何1種

Environment.DIRECTORY_MUSIC, Environment.DIRECTORY_PODCASTS, Environment.DIRECTORY_RINGTONES, Environment.DIRECTORY_ALARMS, Environment.DIRECTORY_NOTIFICATIONS, Environment.DIRECTORY_PICTURES, or Environment.DIRECTORY_MOVIES. )


最后提供1個工具類:

DataCleanManager.java

package com.infzm.daily.know.utils; /* * 文 件 名: DataCleanManager.java * * 描 述: 主要功能有清除內/外緩存,清除數據庫,清除sharedPreference,清除files和清除自定義目錄 * */ import java.io.File; import java.math.BigDecimal; import android.content.Context; import android.os.Environment; import android.text.TextUtils; /** * 本利用數據清除管理器 */ public class DataCleanManager { /** * * 清除本利用內部緩存(/data/data/com.xxx.xxx/cache) * * * * @param context */ public static void cleanInternalCache(Context context) { deleteFilesByDirectory(context.getCacheDir()); } /** * * 清除本利用所有數據庫(/data/data/com.xxx.xxx/databases) * * * * @param context */ public static void cleanDatabases(Context context) { deleteFilesByDirectory(new File("/data/data/" + context.getPackageName() + "/databases")); } /** * * 清除本利用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) * * * @param context */ public static void cleanSharedPreference(Context context) { deleteFilesByDirectory(new File("/data/data/" + context.getPackageName() + "/shared_prefs")); } /** * * 按名字清除本利用數據庫 * * * * @param context * @param dbName */ public static void cleanDatabaseByName(Context context, String dbName) { context.deleteDatabase(dbName); } /** * * 清除/data/data/com.xxx.xxx/files下的內容 * * * * @param context */ public static void cleanFiles(Context context) { deleteFilesByDirectory(context.getFilesDir()); } /** * * 清除外部cache下的內容(/mnt/sdcard/android/data/com.xxx.xxx/cache) * * @param context */ public static void cleanExternalCache(Context context) { if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { deleteFilesByDirectory(context.getExternalCacheDir()); } } /** * * 清除自定義路徑下的文件,使用需謹慎,請不要誤刪。而且只支持目錄下的文件刪除 * * * * @param filePath * */ public static void cleanCustomCache(String filePath) { deleteFilesByDirectory(new File(filePath)); } /** * * 清除本利用所有的數據 * * * * @param context * @param filepath */ public static void cleanApplicationData(Context context, String... filepath) { cleanInternalCache(context); cleanExternalCache(context); cleanDatabases(context); cleanSharedPreference(context); cleanFiles(context); if (filepath == null) { return; } for (String filePath : filepath) { cleanCustomCache(filePath); } } /** * * 刪除方法 這里只會刪除某個文件夾下的文件,如果傳入的directory是個文件,將不做處理 * * * * @param directory */ private static void deleteFilesByDirectory(File directory) { if (directory != null && directory.exists() && directory.isDirectory()) { for (File item : directory.listFiles()) { item.delete(); } } } // 獲得文件 //Context.getExternalFilesDir() --> SDCard/Android/data/你的利用的包名/files/ 目錄,1般放1些長時間保存的數據 //Context.getExternalCacheDir() --> SDCard/Android/data/你的利用包名/cache/目錄,1般寄存臨時緩存數據 public static long getFolderSize(File file) throws Exception { long size = 0; try { File[] fileList = file.listFiles(); for (int i = 0; i < fileList.length; i++) { // 如果下面還有文件 if (fileList[i].isDirectory()) { size = size + getFolderSize(fileList[i]); } else { size = size + fileList[i].length(); } } } catch (Exception e) { e.printStackTrace(); } return size; } /** * 刪除指定目錄下文件及目錄 * * @param deleteThisPath * @param filepath * @return */ public static void deleteFolderFile(String filePath, boolean deleteThisPath) { if (!TextUtils.isEmpty(filePath)) { try { File file = new File(filePath); if (file.isDirectory()) {// 如果下面還有文件 File files[] = file.listFiles(); for (int i = 0; i < files.length; i++) { deleteFolderFile(files[i].getAbsolutePath(), true); } } if (deleteThisPath) { if (!file.isDirectory()) {// 如果是文件,刪除 file.delete(); } else {// 目錄 if (file.listFiles().length == 0) {// 目錄下沒有文件或目錄,刪除 file.delete(); } } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /** * 格式化單位 * * @param size * @return */ public static String getFormatSize(double size) { double kiloByte = size / 1024; if (kiloByte < 1) { return size + "Byte"; } double megaByte = kiloByte / 1024; if (megaByte < 1) { BigDecimal result1 = new BigDecimal(Double.toString(kiloByte)); return result1.setScale(2, BigDecimal.ROUND_HALF_UP) .toPlainString() + "KB"; } double gigaByte = megaByte / 1024; if (gigaByte < 1) { BigDecimal result2 = new BigDecimal(Double.toString(megaByte)); return result2.setScale(2, BigDecimal.ROUND_HALF_UP) .toPlainString() + "MB"; } double teraBytes = gigaByte / 1024; if (teraBytes < 1) { BigDecimal result3 = new BigDecimal(Double.toString(gigaByte)); return result3.setScale(2, BigDecimal.ROUND_HALF_UP) .toPlainString() + "GB"; } BigDecimal result4 = new BigDecimal(teraBytes); return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "TB"; } public static String getCacheSize(File file) throws Exception { return getFormatSize(getFolderSize(file)); } }

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产三级观看久久 | 亚洲 欧美 日韩 综合 | 精品亚洲福利一区二区 | 羞羞免费观看网站 | 精品国产免费福利片 | 性xxxxⅹhd成人 | 日本一区二区成人教育 | 精品99一区二区三区麻豆 | 亚洲精品一区亚洲精品 | 国产精品夜色视频一区二区 | 性做久久久久久 | 欧美激情亚洲一区中文字幕 | 国产精品video | 最近中文字幕完整国语视频 | 亚洲h视频 | 久夜色精品国产一区二区三区 | 日本一区二区免费看 | 国产精品亚洲综合第一区 | 国产 日韩欧美 | 欧美 日韩 亚洲 中文字幕 一区 | 女人18特级一级毛片免费视频 | 色视频一区二区三区 | 欧美在线暴力性xxxx | 操穴网 | 美美女高清毛片视频黄的一免费 | 亚洲激情校园春色 | 亚洲理论a中文字幕在线 | 老妇女人一级毛片 | 亚洲成a人v欧美综合天 | 成人在线观看不卡 | 国产成人精品一区二区三在线观看 | 国产综合在线播放 | 成人欧美精品一区二区不卡 | ccav在线永久免费看 | 国产成人啪精品视频免费网 | 国产三级短视频 | 国产免费高清福利拍拍拍 | 日本国产亚洲 | 久久久久久久99精品免费 | 国产国语一级毛片在线放 | 亚洲欧美日韩国产综合高清 |