android获取缓存大小并清理缓存

2023-11-19

本文主要注重介绍实战操作,理论知识可能介绍的不多,勿喷

简单说两句缓存的好处:

采用缓存,可以进一步大大缓解数据交互的压力,又能提供一定的离线浏览。下边我简略列举一下缓存管理的适用环境:

1. 提供网络服务的应用

2. 数据更新不需要实时更新,哪怕是3-5分钟的延迟也是可以采用缓存机制。

3. 缓存的过期时间是可以接受的(类似网易的新闻阅读,支持离线离线阅读)

这样所带来的好处:

1. 减小服务器的压力

2. 提高客户端的响应速度(本地数据提取嘛)

3. 一定程度上支持离线浏览(可以参考网易的那个新闻应用,个人感觉离线阅读做得非常棒。)


下面贴一段代码可以实现获取缓存大小和清理缓存的功能

[java]   view plain  copy
  1. package com.anbaoyue.manyiwang.utils;  
  2.   
  3. import java.io.File;  
  4. import java.math.BigDecimal;  
  5.   
  6. import android.content.Context;  
  7. import android.os.Environment;  
  8.   
  9. public class MyDataCleanManager {  
  10.   
  11.     public static String getTotalCacheSize(Context context) throws Exception {  
  12.   
  13.         //Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据   
  14.         long cacheSize = getFolderSize(context.getCacheDir());  
  15.         //Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据    
  16.         if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {   
  17.             cacheSize += getFolderSize(context.getExternalCacheDir());  
  18.         }   
  19.         return getFormatSize(cacheSize);  
  20.     }  
  21.   
  22.     public static void clearAllCache(Context context) {  
  23.         deleteDir(context.getCacheDir());  
  24.         if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {   
  25.             deleteDir(context.getExternalCacheDir());  
  26.             //下面两句清理webview网页缓存.但是每次执行都报false,我用的是魅蓝5.1的系统,后来发现且/data/data/应用package目录下找不到database文///件夹 不知道是不是个别手机的问题,  
  27.             context.deleteDatabase("webview.db");      
  28.             context.deleteDatabase("webviewCache.db");  
  29.         }   
  30.     }  
  31.   
  32.     private static boolean deleteDir(File dir) {  
  33.         if (dir != null && dir.isDirectory()) {  
  34.             String[] children = dir.list();  
  35.             for (int i = 0; i < children.length; i++) {  
  36.                 boolean success = deleteDir(new File(dir, children[i]));  
  37.                 if (!success) {  
  38.                     return false;  
  39.                 }  
  40.             }  
  41.         }  
  42.         return dir.delete();  
  43.     }  
  44.   
  45.     // 获取文件   
  46.     //Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据    
  47.     //Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据   
  48.     public static long getFolderSize(File file) throws Exception {   
  49.         long size = 0;   
  50.         try {   
  51.             File[] fileList = file.listFiles();   
  52.             for (int i = 0; i < fileList.length; i++) {   
  53.                 // 如果下面还有文件   
  54.                 if (fileList[i].isDirectory()) {   
  55.                     size = size + getFolderSize(fileList[i]);   
  56.                 } else {   
  57.                     size = size + fileList[i].length();   
  58.                 }   
  59.             }   
  60.         } catch (Exception e) {   
  61.             e.printStackTrace();   
  62.         }   
  63.         return size;   
  64.     }   
  65.   
  66.     /** 
  67.      * 格式化单位 
  68.      * @param size 
  69.      */  
  70.     public static String getFormatSize(double size) {   
  71.         double kiloByte = size / 1024;   
  72.         if (kiloByte < 1) {   
  73.             return size + "Byte";   
  74.         }   
  75.   
  76.         double megaByte = kiloByte / 1024;   
  77.         if (megaByte < 1) {   
  78.             BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));   
  79.             return result1.setScale(2, BigDecimal.ROUND_HALF_UP)   
  80.                     .toPlainString() + "KB";   
  81.         }   
  82.   
  83.         double gigaByte = megaByte / 1024;   
  84.         if (gigaByte < 1) {   
  85.             BigDecimal result2 = new BigDecimal(Double.toString(megaByte));   
  86.             return result2.setScale(2, BigDecimal.ROUND_HALF_UP)   
  87.                     .toPlainString() + "MB";   
  88.         }   
  89.   
  90.         double teraBytes = gigaByte / 1024;   
  91.         if (teraBytes < 1) {   
  92.             BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));   
  93.             return result3.setScale(2, BigDecimal.ROUND_HALF_UP)   
  94.                     .toPlainString() + "GB";   
  95.         }   
  96.         BigDecimal result4 = new BigDecimal(teraBytes);   
  97.         return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()   
  98.                 + "TB";   
  99.     }    
  100.   
  101. }  



使用方法:

在Fragment中

String dataSize = MyDataCleanManager.getTotalCacheSize(getActivity().getApplicationContext());

在activity中直接

String dataSize = MyDataCleanManager.getTotalCacheSize(getApplicationContext());

上面的代码清理已经能实现把所有的缓存文件清理包括webView的缓存

但是使用webView需要手动开启:关于webview的缓存处理我专门有写了一篇:http://blog.csdn.net/wei_chong_chong/article/details/52189011


参考:http://blog.csdn.net/zhuanshenweiliu/article/details/31744673

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android获取缓存大小并清理缓存 的相关文章

  • SSLContext 初始化

    我正在看JSSE参考指南 我需要获取一个实例SSLContext为了创建一个SSLEngine 所以我可以使用它Netty以启用安全性 获取实例SSLContext I use SSLContext getInstance 我看到该方法被重
  • JaCoCo 显示 0% 覆盖率,即使所有测试均已通过

    我在下面写了一些测试用例androidTest目录 我正在使用 androidx testInstrumentationRunner androidx test runner AndroidJUnitRunner 添加的依赖项 androi
  • 合并和颜色样式不适用于 Apache POI excel 2003 格式

    在 Apache POI 中 我为某些单元格应用了一些样式并合并了这些单元格 当我在 2010 年或 2007 年打开时 它工作正常 但在 2003 年 格式样式消失了 每次保存 2003 Excel 文件之前都会弹出兼容性检查对话框 请参
  • ThreadPoolExecutor 和队列

    我以为使用线程池执行器 http docs oracle com javase 6 docs api java util concurrent ThreadPoolExecutor html我们可以提交Runnables 要在以下位置执行B
  • 如何在java中从包含.0的浮点数中删除小数部分

    我只想删除包含的浮点数的小数部分 0 所有其他数字都是可以接受的 例如 I P 1 0 2 2 88 0 3 56666 4 1 45 00 99 560 O P 1 2 2 88 3 567 4 1 45 99 560 有什么方法可以做到
  • 如何在 Java 中使用 HTML 解析器和 Apache Tika 来提取所有 HTML 标签?

    我下载了 tika core 和 tika parser 库 但找不到将 HTML 文档解析为字符串的示例代码 我必须删除网页源的所有 html 标签 我能做些什么 如何使用 Apache Tika 进行编码 您想要 html 文件的纯文本
  • 从前台服务的活动中释放内存

    我有一个带有前台服务和一项活动的应用程序 该服务可以在启动时自行启动 也可以从 Activity 中启动 我注意到当服务在启动时自行启动时 内存使用量约为 3MB 一旦我打开该 Activity 内存使用量就会跃升至约 9mB 一旦 Act
  • 如何为键盘上的 xml 中的功能键设置不同的背景?

    我正在开发 Android 键盘应用程序 我尝试为普通键和功能键设置不同的背景 但它不起作用
  • 如何在Android 11中获取dir文件列表

    我想编写自己的精简版文件浏览器 文件 API 现在不适用于外部存储 该版本还提供了对范围存储的改进 这使得开发人员可以更轻松地迁移到使用此存储模型 我不明白如何使用范围存储来访问 sdcard 如果您正在寻找文件选择器体验 存储访问框架 h
  • Jersey 和 Spring 中的全局异常处理?

    我正在使用 Jersey 和 Spring 3 2 以及 Open CMIS 开发 RESTful Web 服务 我没有使用 Spring 的 MVC 模式 它只是 Spring IOC 和 Jersey SpringServlet 控制器
  • SQlite 获取最近的位置(带有纬度和经度)

    我的 SQLite 数据库中存储有纬度和经度的数据 我想获取距我输入的参数最近的位置 例如我当前的位置 纬度 经度等 我知道这在 MySQL 中是可能的 并且我已经做了相当多的研究 SQLite 需要一个自定义外部函数来实现半正弦公式 计算
  • 在 Apache Servicemix 4 中的 OSGi 包之间共享配置文件?

    有人能够在 SMX4 中的两个或多个捆绑包之间成功共享配置吗 我正在寻找的是这样的 有一个文件 SMX HOME etc myconfiguration cfg 使此配置 可用 以便使用 Spring dm 通过 OSGi 配置管理将其注入
  • Java DNSLookup MX 记录列表。类似于 MXToolBox

    我正在构建一个程序来列出域的所有 MX 记录 起初似乎工作正常 但与在线工具进行比较后http mxtoolbox com http mxtoolbox com 有些域程序无法获取 MX 记录 而 MXToolbox 可以 我不确定原因是什
  • Eclipse Juno 指标插件

    Eclipse JUNO 版本有哪些 Eclipse 指标插件 我尝试了一些通用指标插件 但没有一个能够在 Eclipse 的 JUNO 版本中正常运行 差点忘了 我们正在使用 Java 作为编程语言 我想要诸如圈复杂度 代码行数 方法长度
  • Android Lollipop:将应用程序小部件添加到主屏幕时启动器崩溃

    添加小部件时 启动器在 Android Lollipop 上崩溃 并显示以下消息 在以前的 Android 版本上运行良好 编辑 这只发生在横向方向 12 16 12 35 10 208 E AndroidRuntime 960 java
  • Android 10 通知彩色操作按钮

    I m trying to color the buttons Action in Notification like this So far this is what i m achieved so far 下面是我正在使用的代码 通知服
  • 如何从 Sublime Text 编辑器调试 Java 应用程序

    有时我正在对相当大的 Java 应用程序进行简单的修复 但我不想打开 Eclipse 来执行此任务 Eclipse 启动时间很长 并且由于该项目是由大量子项目构建的 而这些子项目无论如何都是由 Maven 构建的 因此需要很长时间才能使用
  • SubscriptionManager 用于读取运行 Android 5.1+ 的双 SIM 设备的 IMSI

    对于 API 22 我尝试使用 SubscriptionManager 读取双 SIM 卡 IMSI IMSI 是 14 到 15 个字符 格式如下 MCC MNC MSIN MCC 移动国家 地区代码 例如 美国为 310 MNC 移动网
  • 将其元素添加到另一个列表后清除列表

    我正在做一个程序 它获取更多句子作为参数 我制作了 2 个列表 一个称为 propozitie 其中包含每个句子 另一个称为 propozitii 其中包含所有句子 问题是 当我在遇到 后清除 propozitie 列表时 它也会清除 pr
  • 允许使用 SurfaceTexture 在 GLSurfaceView 渲染器中进行多通道渲染

    我正在显示视频GLSurfaceView使用需要连续应用多个着色器的自定义渲染器 目前 它可以成功地使用一个着色器 但我不确定如何扩展渲染管道以连续应用多个着色器 我知道有一些关于应用多个着色器的示例 使用FrameBuffers and

随机推荐

  • SpringBoot整合Mybatis-plus实现多级评论

    在本文中 我们将介绍如何使用SpringBoot整合Mybatis plus实现多级评论功能 同时 本文还将提供数据库的设计和详细的后端代码 前端界面使用Vue2 数据库设计 本文的多级评论功能将采用MySQL数据库实现 下面是数据库的设计
  • [学习记录]Flask会话维护

    前置知识 1 http是一种无状态的通信协议 本身不保存通信状态 2 web服务器本质上负责接收用户的请求 request 并按照规则给予用户响应 response 3 会话 session 是web服务器用来管理用户的一种方式 在一次会话
  • 图像描述算法排位赛:SceneXplain 与 MiniGPT4 谁将夺得桂冠?

    如果你对图像描述算法的未来感到好奇 本场 图像描述算法排位赛 绝对是你不能错过的 在这场较量中 SceneXplain 和 MiniGPT 4 将会比试 谁将摘得这场比赛的桂冠 背景介绍 在上篇文章中 我们介绍了图像描述 Image Cap
  • List[Bean]与jsonArray字符串的相互转换

    List User 与jsonArray字符串的相互转换 object testo725 def main args Array String Unit val lili User User lili 15 val tom User Use
  • Windows基础命令

    一 目录和文件的应用操作 1 cd命令 cd d d 切换d盘目录 因为改变了驱动器 所有需要加上 d 选项 cd c 如果没有改变驱动器号 就不需要加 d 选项 目录分为相对路径和绝对路径 相对路径 以当前为起点 代表的是当前路径 代表的
  • 稀疏技术——使用MATLAB编写

    稀疏技术 使用MATLAB编写 导读 核心思想 具体代码 结果 导读 本文源于武老师电力系统仿真课程的其中一个作业 了解 SPICE的同学可能知道SPICE SimulationProgram with Integrated Circuit
  • 架构设计之如何写架构设计说明书

    架构设计是需求分析到软件实现的桥梁 也是决定软件质量的关键 编制架构设计说明书是开发人员向架构师转变必定会经历的过程 在架构师整个的成长过程中 必定会经历编制架构设计说明书 评审架构设计说明书以及根据业务需求分析设计系统架构的三个过程 作为
  • 全面介绍:从零开始学习Playwright白动化测试框架

    01 简介 Playwright是2021年微软开源的一个项目 playwright python 针对 Python 语言的纯自动化工具 它可以通过单个API自动执行 Chromium Firefox 和 WebKit 浏览器 同时支持以
  • 6-3 简单求和 (10分)

    6 3 简单求和 10分 本题要求实现一个函数 求给定的N个整数的和 函数接口定义 intSum intList intN 其中给定整数存放在数组List 中 正整数N是数组元素个数 该函数须返回N个List 元素的和 裁判测试程序样例 i
  • Unity客户端面试题集锦

    正在求职中 近期准备开始求职的小伙伴们看过来 贴心的我 这次又给大家准备了 面试题大礼包 Unity游戏开发工程师的面试过程中 我们总能接触到许多眼熟的面试题目 这部分的分数如果不小心丢了 那才是最可惜的 大厂的大门只会早早就在你眼前关上
  • AngularJS学习入手资料

    这是一个非常好的入门技术学习网站 非常棒 就在这里学习吧 http www runoob com angularjs angularjs tutorial html 这个网站有别人学习的例子 例子可以直接下载 http javahonk c
  • 服务器系统2022安装wsl2,手把手教你踩坑:老白的Docker for Windows安装初探WSL 2 backend...

    手把手教你踩坑 老白的Docker for Windows安装初探WSL 2 backend 2020 06 16 13 29 47 15点赞 63收藏 4评论 创作立场声明 老白的踩坑记录 嗨 大家好 前几日老白对Docker for W
  • 【Vue】从0-1全系列Vue教程带你启航!

    hello 我是小索奇 Vue js 已经备好文章 预更新哈 涵盖 Vue2 和 Vue3 涵盖代码示例 拓展内容 图解 疑难解答 让大家用最通俗的方式来学会 Vue 本系列会考虑到新手 会由浅入深 即使你是老玩家 也可以收藏备用 其中有很
  • offer审批被刷的可能性_HR辛辣提问:“你目前有几个offer?”聪明人会怎么回答?...

    很多同学在面试中 都可能被HR辛辣的问题突袭 当HR突然冷不丁问你一句 你目前手里有几个offer 回答这个问题的最佳方式 是如实回答 还是有选择地回应呢 最怕空气突然安静 今天有见就教你几种方法 01没有offer 没有 就说没有 可以说
  • SpringMvc Controller中几种参数的绑定

    1 SpringMVC默认支持的绑定类型有 2 HttpServletRequest对象 通过request对象可以获取参数信息 3 HttpServletResponse对象 通过response对象可以处理响应信息 4 HttpSess
  • 计算机系统课程 笔记总结 CSAPP第四章 处理器体系结构(4.1-4.3)

    GitHub计算机系统CSAPP课程资源 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 1 2 2 计算机系统课程 笔记总结 CSAPP第二章 信息的表示和处理 2 3 2 4 计算机系统课程 笔记总结 CSAPP第三章
  • ChatGPT办公应用:制作PPT大纲

    正文共 617字 阅读大约需要 4 分钟 解决方案专家必备技巧 您将在4分钟后获得以下超能力 制作PPT大纲 Beezy评级 B级 经过简单的寻找 大部分人能立刻掌握 主要节省时间 推荐人 Kim 编辑者 Yuke PPT技能是一项重要办公
  • PID算法理论,运用,代码编写详解

    什么是PID 我相信能来看这篇文章的应该都知道什么是PID PID就是一种控制算法 利用比例运算 P 积分运算 I 和微分运算 D 一起控制某一事件 当然也可以只运用其中一个也可以两两结合 运用举例 比如我们家里都会有的那个电热水器 有点热
  • msvcp140.dll丢失的4种解决方法,快速修复msvcp140.dll文件

    msvcp140 dll丢失在所有的dll文件丢失里面 也算是经常丢失的老油条了 我们应该对它都不陌生吧 不过直到今天都还有人不知道怎么修复msvcp140 dll文件 小编觉得非常有必要来给大家详细的说说吧 聊一下msvcp140 dll
  • android获取缓存大小并清理缓存

    本文主要注重介绍实战操作 理论知识可能介绍的不多 勿喷 简单说两句缓存的好处 采用缓存 可以进一步大大缓解数据交互的压力 又能提供一定的离线浏览 下边我简略列举一下缓存管理的适用环境 1 提供网络服务的应用 2 数据更新不需要实时更新 哪怕