Android(安卓)清理缓存、优化内存空间
16lz
2021-01-26
有时候项目中需要清理一些缓存数据(如:图片缓存、网络数据缓存等),当然也要对SharedPreferences存储的数据进行清理,当然App中有个这样的功能可能会提高逼格吧。
public class CacheDataManager { /** * 获取整体缓存大小 * @param context * @return * @throws Exception */ public static String getTotalCacheSize(Context context) throws Exception { long cacheSize = getFolderSize(context.getCacheDir()); if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { cacheSize += getFolderSize(context.getExternalCacheDir()); } return getFormatSize(cacheSize); } /** * 获取文件 * Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据 * Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据 * @param file * @return * @throws Exception */ 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 size */ public static String getFormatSize(long size) { long kb = size / 1024; int m = (int) (kb / 1024); int kbs = (int) (kb % 1024); return m + "." + kbs + "M";// 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"; } /** * 清空方法 * @param context */ public static void clearAllCache(Context context) { deleteDir(context.getCacheDir()); if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { deleteDir(context.getExternalCacheDir()); } } private static boolean deleteDir(File dir) { if (dir != null && dir.isDirectory()) { String[] children = dir.list(); for (int i = 0; i < children.length; i++) { boolean success = deleteDir(new File(dir, children[i])); if (!success) { return false; } } } return dir.delete(); }}
直接调用:
CacheDataManager.clearAllCache(SettingActivity.this);
其实它的清理速度是非常快的,那么做一个延时效果会让用户有一点点体验的:
@OnClick(R.id.setting_cleancache) void clean() { //设置默认的等待效果 mDlg = new WaitingDlg(SettingActivity.this, "", "", true); PromptDialog dialog = new PromptDialog(SettingActivity.this, R.string.prompt, R.string.cleancache_title); dialog.showYesNo(new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { SPUtils.clear(); mDlg.start(); new Thread(new clearCache()).start(); dialog.dismiss(); } }); } private Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 0: mDlg.dismiss(); Toast.makeText(SettingActivity.this, "清理完成", Toast.LENGTH_SHORT).show(); try { cachetext.setText(CacheDataManager.getTotalCacheSize(SettingActivity.this)); } catch (Exception e) { e.printStackTrace(); } } } }; class clearCache implements Runnable { @Override public void run() { try { CacheDataManager.clearAllCache(SettingActivity.this); Thread.sleep(1000); if (CacheDataManager.getTotalCacheSize(SettingActivity.this).startsWith("0")) { handler.sendEmptyMessage(0); } } catch (Exception e) { return; } } }
更多相关文章
- Android串口开发
- android之简单数据存储Preference
- Android(安卓)Jamendo开源在线音乐播放器源码分析七 数据缓存和
- Android(安卓)源码环境下 C++通过aidl与java层系统服务通信
- IPCThreadState 详解
- android 网络状态
- delphi xe5 android 开发数据访问手机端(二)
- Android(安卓)连接Mysql数据库步骤(新手步骤)
- android 导出带数据库文件的APK