Android 清除缓存

转发地址:http://blog.csdn.net/u012885461/article/details/46458089

本应用数据清除管理器  

DataCleanManager.java   是从网上摘的 忘了 名字了 对不住了

加载一个webview   产生缓存  众所周知的webview是产生缓存的主要原因之一


webview加载之后   点击按钮  查询缓存  然后清除缓存  再查询缓存  可以看到  缓存确实被清除了  

或者咋webview加载之后  点击按钮查询缓存  然后去设置里面应用程序  看程序的缓存是不是一样的  答案肯定是一样 

下面是代码


DataCleanManager.java

[java]  view plain  copy
  1. package com.yqy.yqy_cache;  
  2.   
  3. /*  * 文 件 名:  DataCleanManager.java  * 描    述:  主要功能有清除内/外缓存,清除数据库,清除sharedPreference,清除files和清除自定义目录  */  
  4.   
  5. import java.io.File;  
  6. import java.math.BigDecimal;  
  7.   
  8. import android.content.Context;  
  9. import android.os.Environment;  
  10.   
  11. /** * 本应用数据清除管理器 */  
  12. public class DataCleanManager {  
  13.       
  14.     public static String getTotalCacheSize(Context context) throws Exception {  
  15.         long cacheSize = getFolderSize(context.getCacheDir());  
  16.         if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {    
  17.             cacheSize += getFolderSize(context.getExternalCacheDir());  
  18.         }    
  19.         return getFormatSize(cacheSize);  
  20.     }  
  21.       
  22.     // 获取文件    
  23.     //Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据    
  24.     //Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据    
  25.     public static long getFolderSize(File file) throws Exception {    
  26.         long size = 0;    
  27.         try {    
  28.             File[] fileList = file.listFiles();    
  29.             for (int i = 0; i < fileList.length; i++) {    
  30.                 // 如果下面还有文件    
  31.                 if (fileList[i].isDirectory()) {    
  32.                     size = size + getFolderSize(fileList[i]);    
  33.                 } else {    
  34.                     size = size + fileList[i].length();    
  35.                 }    
  36.             }    
  37.         } catch (Exception e) {    
  38.             e.printStackTrace();    
  39.         }    
  40.         return size;    
  41.     }    
  42.       
  43.     public static void clearAllCache(Context context) {  
  44.         deleteDir(context.getCacheDir());  
  45.         if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {    
  46.             deleteDir(context.getExternalCacheDir());  
  47.         }    
  48.     }  
  49.      
  50.     private static boolean deleteDir(File dir) {  
  51.         if(dir == null){  
  52.             return false;  
  53.         }  
  54.         if (dir != null && dir.isDirectory()) {  
  55.             String[] children = dir.list();  
  56.             for (int i = 0; i < children.length; i++) {  
  57.                 boolean success = deleteDir(new File(dir, children[i]));  
  58.                 if (!success) {  
  59.                     return false;  
  60.                 }  
  61.             }  
  62.         }  
  63.         return dir.delete();  
  64.     }  
  65.          
  66.     /**  
  67.      * 格式化单位  
  68.      *   
  69.      * @param size  
  70.      * @return  
  71.      */   
  72.     public static String getFormatSize(double size) {    
  73.         double kiloByte = size / 1024;    
  74.         if (kiloByte < 1) {    
  75. //            return size + "Byte";    
  76.             return "0K";  
  77.         }    
  78.      
  79.         double megaByte = kiloByte / 1024;    
  80.         if (megaByte < 1) {    
  81.             BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));    
  82.             return result1.setScale(2, BigDecimal.ROUND_HALF_UP)    
  83.                     .toPlainString() + "KB";    
  84.         }    
  85.      
  86.         double gigaByte = megaByte / 1024;    
  87.         if (gigaByte < 1) {    
  88.             BigDecimal result2 = new BigDecimal(Double.toString(megaByte));    
  89.             return result2.setScale(2, BigDecimal.ROUND_HALF_UP)    
  90.                     .toPlainString() + "MB";    
  91.         }    
  92.      
  93.         double teraBytes = gigaByte / 1024;    
  94.         if (teraBytes < 1) {    
  95.             BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));    
  96.             return result3.setScale(2, BigDecimal.ROUND_HALF_UP)    
  97.                     .toPlainString() + "GB";    
  98.         }    
  99.         BigDecimal result4 = new BigDecimal(teraBytes);    
  100.         return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()    
  101.                 + "TB";    
  102.     }   
  103.       
  104.     /** * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * * @param context */  
  105.     public static void cleanInternalCache(Context context) {  
  106.         deleteFilesByDirectory(context.getCacheDir());  
  107.     }  
  108.   
  109.     /** * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * * @param context */  
  110.     public static void cleanDatabases(Context context) {  
  111.         deleteFilesByDirectory(new File("/data/data/"  
  112.                 + context.getPackageName() + "/databases"));  
  113.     }  
  114.   
  115.     /** 
  116.      * * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) * * @param 
  117.      * context 
  118.      */  
  119.     public static void cleanSharedPreference(Context context) {  
  120.         deleteFilesByDirectory(new File("/data/data/"  
  121.                 + context.getPackageName() + "/shared_prefs"));  
  122.     }  
  123.   
  124.     /** * 按名字清除本应用数据库 * * @param context * @param dbName */  
  125.     public static void cleanDatabaseByName(Context context, String dbName) {  
  126.         context.deleteDatabase(dbName);  
  127.     }  
  128.   
  129.     /** * 清除/data/data/com.xxx.xxx/files下的内容 * * @param context */  
  130.     public static void cleanFiles(Context context) {  
  131.         deleteFilesByDirectory(context.getFilesDir());  
  132.     }  
  133.   
  134.     /** 
  135.      * * 清除外部cache下的内容(/mnt/sdcard/android/data/com.xxx.xxx/cache) * * @param 
  136.      * context 
  137.      */  
  138.     public static void cleanExternalCache(Context context) {  
  139.         if (Environment.getExternalStorageState().equals(  
  140.                 Environment.MEDIA_MOUNTED)) {  
  141.             deleteFilesByDirectory(context.getExternalCacheDir());  
  142.         }  
  143.     }  
  144.   
  145.     /** * 清除自定义路径下的文件,使用需小心,请不要误删。而且只支持目录下的文件删除 * * @param filePath */  
  146.     public static void cleanCustomCache(String filePath) {  
  147.         deleteFilesByDirectory(new File(filePath));  
  148.     }  
  149.   
  150.     /** * 清除本应用所有的数据 * * @param context * @param filepath */  
  151.     public static void cleanApplicationData(Context context, String... filepath) {  
  152.         cleanInternalCache(context);  
  153.         cleanExternalCache(context);  
  154.         cleanDatabases(context);  
  155.         cleanSharedPreference(context);  
  156.         cleanFiles(context);  
  157.         for (String filePath : filepath) {  
  158.             cleanCustomCache(filePath);  
  159.         }  
  160.     }  
  161.   
  162.     /** * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理 * * @param directory */  
  163.     private static void deleteFilesByDirectory(File directory) {  
  164.         if (directory != null && directory.exists() && directory.isDirectory()) {  
  165.             for (File item : directory.listFiles()) {  
  166.                 item.delete();  
  167.             }  
  168.         }  
  169.     }  
  170. }  

MainActivity.java

[java]  view plain  copy
  1. package com.yqy.yqy_cache;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.util.Log;  
  6. import android.view.Menu;  
  7. import android.view.View;  
  8. import android.view.View.OnClickListener;  
  9. import android.webkit.WebView;  
  10. import android.widget.Button;  
  11.   
  12. public class MainActivity extends Activity {  
  13.       
  14.     private Button btn_clear;  
  15.     private WebView wv;  
  16.       
  17.   
  18.     @Override  
  19.     protected void onCreate(Bundle savedInstanceState) {  
  20.         super.onCreate(savedInstanceState);  
  21.         setContentView(R.layout.activity_main);  
  22.         btn_clear = (Button) findViewById(R.id.btn_clear);  
  23.         wv = (WebView) findViewById(R.id.wv);  
  24.           
  25.         btn_clear.setOnClickListener(new OnClickListener() {  
  26.               
  27.             @Override  
  28.             public void onClick(View arg0) {  
  29.                 // TODO Auto-generated method stub  
  30.                 try {  
  31.                     //查看缓存的大小  
  32.                     Log.e("YQY", DataCleanManager.getTotalCacheSize(MainActivity.this));  
  33.                 } catch (Exception e) {  
  34.                     e.printStackTrace();  
  35.                 }  
  36.                 //清除操作  
  37.                 DataCleanManager.clearAllCache(MainActivity.this);  
  38.                 try {  
  39.                     //清除后的操作  
  40.                     Log.e("YQY", DataCleanManager.getTotalCacheSize(MainActivity.this));  
  41.                 } catch (Exception e) {  
  42.                     e.printStackTrace();  
  43.                 }  
  44.             }  
  45.         });  
  46.           
  47.         wv.loadUrl("http://www.baidu.com");  
  48.           
  49.     }  
  50.   
  51.     @Override  
  52.     public boolean onCreateOptionsMenu(Menu menu) {  
  53.         // Inflate the menu; this adds items to the action bar if it is present.  
  54.         getMenuInflater().inflate(R.menu.main, menu);  
  55.         return true;  
  56.     }  
  57.   
  58. }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值