android -应用软件获取缓存大小和清除缓存功能

Android 获取缓存大小和清除缓存功能 前言 我们常常会看到某某APP中会有清除APP浏览时产生的缓存清理功能,今天闲来无事也试试实现这功能,虽然说第三方的清理工具可以帮你清理,但是如果你的手机物理内存比较小的话你还会安装第三方软件么?虽然现在三四百的安卓手机内存都比较大了,但是提高用户体验APP自身带一个清理缓存的功能还是有必要的。 看一下效果图: 我们来考虑一个问题我们应用内的缓存数据存放在哪里? 阅读详情
 

Android记录20-获取缓存大小和清除缓存功能


目录(?)[+]

获取缓存大小和清除缓存功能


前言

本篇博客要给大家分享的如何获取应用缓存的大小和清除缓存的功能,我们知道我们应用当中经常会产生一些数据,比如图片的缓存,数据库文件,配置文件等等。我们开发产品的时候,可能会有这样的一个需求清除应用内缓存的数据,可以让用户选择删除应用内产生的数据,这也是比较人性化的设计点。例如笔者参与开发的一款产品的设置界面就提供了清除缓存的功能,如下图所示:


在贴一大段代码之前,先普及Android的相关知识点:

先看360手机助手的一张图:


从上面这张图,我们可以看到这部手机有

系统文件(注:这个是系统的文件系统,不允许修改的)

内置SD卡(注:现在的手机基本上都有,就是我们所谓的ROM,是不可以移除的,RAM是我们手机的运行内存)

外置SD卡(注:这个就是我们的SD卡了,可以移除)

我们来考虑一个问题我们应用内的缓存数据存放在哪里?

我们的应用程序一般会产生以下几种类型的数据:

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())


一种情况,我们没有外置SD卡,那么我们安装的应用安装在哪里?自然是手机中的内置SD卡里,具体路径是这样的:


那在Android是用什么方法来获取这个路径的:


如果我们手机有外置SD卡,我们也可以把应用安装在SD卡,但移除SD卡之后就不能使用了。



不管是内置还是外置SD卡,获取路径的方法是一样:

获取SD卡根目录:Environment.getExternalStorageDirectory().getAbsolutePath();

外部Cache路径:/mnt/sdcard/android/data/com.xxx.xxx/cache 一般存储缓存数据(注:通过getExternalCacheDir()获取)

外部File路径:/mnt/sdcard/android/data/com.xxx.xxx/files 存储长时间存在的数据 (注:通过getExternalFilesDir(String type)获取, type为特定类型,可以是以下任何一种

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


最后提供一个工具类:

DataCleanManager.java

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.infzm.daily.know.utils;  
  2.   
  3. /*  * 文 件 名:  DataCleanManager.java   
  4.  * * 描    述:  主要功能有清除内/外缓存,清除数据库,清除sharedPreference,清除files和清除自定义目录   
  5.  * */  
  6.   
  7. import java.io.File;  
  8. import java.math.BigDecimal;  
  9.   
  10. import android.content.Context;  
  11. import android.os.Environment;  
  12. import android.text.TextUtils;  
  13.   
  14. /** * 本应用数据清除管理器 */  
  15. public class DataCleanManager {  
  16.     /** 
  17.      * * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * * 
  18.      *  
  19.      * @param context 
  20.      */  
  21.     public static void cleanInternalCache(Context context) {  
  22.         deleteFilesByDirectory(context.getCacheDir());  
  23.     }  
  24.   
  25.     /** 
  26.      * * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * * 
  27.      *  
  28.      * @param context 
  29.      */  
  30.     public static void cleanDatabases(Context context) {  
  31.         deleteFilesByDirectory(new File("/data/data/"  
  32.                 + context.getPackageName() + "/databases"));  
  33.     }  
  34.   
  35.     /** 
  36.      * * 清除本应用SharedPreference(/data/data/com.xxx.xxx/shared_prefs) * 
  37.      *  
  38.      * @param context 
  39.      */  
  40.     public static void cleanSharedPreference(Context context) {  
  41.         deleteFilesByDirectory(new File("/data/data/"  
  42.                 + context.getPackageName() + "/shared_prefs"));  
  43.     }  
  44.   
  45.     /** 
  46.      * * 按名字清除本应用数据库 * * 
  47.      *  
  48.      * @param context 
  49.      * @param dbName 
  50.      */  
  51.     public static void cleanDatabaseByName(Context context, String dbName) {  
  52.         context.deleteDatabase(dbName);  
  53.     }  
  54.   
  55.     /** 
  56.      * * 清除/data/data/com.xxx.xxx/files下的内容 * * 
  57.      *  
  58.      * @param context 
  59.      */  
  60.     public static void cleanFiles(Context context) {  
  61.         deleteFilesByDirectory(context.getFilesDir());  
  62.     }  
  63.   
  64.     /** 
  65.      * * 清除外部cache下的内容(/mnt/sdcard/android/data/com.xxx.xxx/cache) 
  66.      *  
  67.      * @param context 
  68.      */  
  69.     public static void cleanExternalCache(Context context) {  
  70.         if (Environment.getExternalStorageState().equals(  
  71.                 Environment.MEDIA_MOUNTED)) {  
  72.             deleteFilesByDirectory(context.getExternalCacheDir());  
  73.         }  
  74.     }  
  75.     /** 
  76.      * * 清除自定义路径下的文件,使用需小心,请不要误删。而且只支持目录下的文件删除 * * 
  77.      *  
  78.      * @param filePath 
  79.      * */  
  80.     public static void cleanCustomCache(String filePath) {  
  81.         deleteFilesByDirectory(new File(filePath));  
  82.     }  
  83.   
  84.     /** 
  85.      * * 清除本应用所有的数据 * * 
  86.      *  
  87.      * @param context 
  88.      * @param filepath 
  89.      */  
  90.     public static void cleanApplicationData(Context context, String... filepath) {  
  91.         cleanInternalCache(context);  
  92.         cleanExternalCache(context);  
  93.         cleanDatabases(context);  
  94.         cleanSharedPreference(context);  
  95.         cleanFiles(context);  
  96.         if (filepath == null) {  
  97.             return;  
  98.         }  
  99.         for (String filePath : filepath) {  
  100.             cleanCustomCache(filePath);  
  101.         }  
  102.     }  
  103.   
  104.     /** 
  105.      * * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理 * * 
  106.      *  
  107.      * @param directory 
  108.      */  
  109.     private static void deleteFilesByDirectory(File directory) {  
  110.         if (directory != null && directory.exists() && directory.isDirectory()) {  
  111.             for (File item : directory.listFiles()) {  
  112.                 item.delete();  
  113.             }  
  114.         }  
  115.     }  
  116.       
  117.     // 获取文件  
  118.     //Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files/ 目录,一般放一些长时间保存的数据  
  119.     //Context.getExternalCacheDir() --> SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据  
  120.     public static long getFolderSize(File file) throws Exception {  
  121.         long size = 0;  
  122.         try {  
  123.             File[] fileList = file.listFiles();  
  124.             for (int i = 0; i < fileList.length; i++) {  
  125.                 // 如果下面还有文件  
  126.                 if (fileList[i].isDirectory()) {  
  127.                     size = size + getFolderSize(fileList[i]);  
  128.                 } else {  
  129.                     size = size + fileList[i].length();  
  130.                 }  
  131.             }  
  132.         } catch (Exception e) {  
  133.             e.printStackTrace();  
  134.         }  
  135.         return size;  
  136.     }  
  137.       
  138.     /** 
  139.      * 删除指定目录下文件及目录 
  140.      *  
  141.      * @param deleteThisPath 
  142.      * @param filepath 
  143.      * @return 
  144.      */  
  145.     public static void deleteFolderFile(String filePath, boolean deleteThisPath) {  
  146.         if (!TextUtils.isEmpty(filePath)) {  
  147.             try {  
  148.                 File file = new File(filePath);  
  149.                 if (file.isDirectory()) {// 如果下面还有文件  
  150.                     File files[] = file.listFiles();  
  151.                     for (int i = 0; i < files.length; i++) {  
  152.                         deleteFolderFile(files[i].getAbsolutePath(), true);  
  153.                     }  
  154.                 }  
  155.                 if (deleteThisPath) {  
  156.                     if (!file.isDirectory()) {// 如果是文件,删除  
  157.                         file.delete();  
  158.                     } else {// 目录  
  159.                         if (file.listFiles().length == 0) {// 目录下没有文件或者目录,删除  
  160.                             file.delete();  
  161.                         }  
  162.                     }  
  163.                 }  
  164.             } catch (Exception e) {  
  165.                 // TODO Auto-generated catch block  
  166.                 e.printStackTrace();  
  167.             }  
  168.         }  
  169.     }  
  170.       
  171.     /** 
  172.      * 格式化单位 
  173.      *  
  174.      * @param size 
  175.      * @return 
  176.      */  
  177.     public static String getFormatSize(double size) {  
  178.         double kiloByte = size / 1024;  
  179.         if (kiloByte < 1) {  
  180.             return size + "Byte";  
  181.         }  
  182.   
  183.         double megaByte = kiloByte / 1024;  
  184.         if (megaByte < 1) {  
  185.             BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));  
  186.             return result1.setScale(2, BigDecimal.ROUND_HALF_UP)  
  187.                     .toPlainString() + "KB";  
  188.         }  
  189.   
  190.         double gigaByte = megaByte / 1024;  
  191.         if (gigaByte < 1) {  
  192.             BigDecimal result2 = new BigDecimal(Double.toString(megaByte));  
  193.             return result2.setScale(2, BigDecimal.ROUND_HALF_UP)  
  194.                     .toPlainString() + "MB";  
  195.         }  
  196.   
  197.         double teraBytes = gigaByte / 1024;  
  198.         if (teraBytes < 1) {  
  199.             BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));  
  200.             return result3.setScale(2, BigDecimal.ROUND_HALF_UP)  
  201.                     .toPlainString() + "GB";  
  202.         }  
  203.         BigDecimal result4 = new BigDecimal(teraBytes);  
  204.         return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()  
  205.                 + "TB";  
  206.     }  
  207.       
  208.       
  209.     public static String getCacheSize(File file) throws Exception {  
  210.         return getFormatSize(getFolderSize(file));  
  211.     }  
  212.       
  213. }  
Android开发中 获取App缓存大小以及清除缓存 未经博客主同意不能转载 转载请声明转载处:https://mp.youkuaiyun.com/postedit/79747748获取App数据缓存大小可以通过以下几种方式:    1:代码方式    Environment.getExternalStorageDirectory().getAbsolutePath();//获取SD卡根目录:        Content. getCacheDir(); // ... 阅读详情

相关推荐

cordova-plugin-clearcache:清除应用程序缓存

cordova-plugin-clearcache Clear Application Cache Install cordova plugin add Use getCaches 获取应用缓存大小 navigator.clearCache.getCaches(function (result) { // 获取成功回调方法 // result - 缓存大小,单位Bytes }); clearCaches 清除应用缓存 navigator.clearCache.clearCaches(function () { // 清除成功回调方法 });

Android记录20-获取缓存大小和清除缓存功能

Android开发记录20-获取缓存大小和清除缓存功能 转载请注明:IT_xiao小巫博客地址:http://blog.youkuaiyun.com/wwj_748 前言 本篇博客要给大家分享的如何获取应用缓存的大小和清除缓存的功能,我们知道我们应用当中经常会产生一些数据,比如图片的缓存,数据库文件,配置文件等等。我们开发产品的时候,可能会有这样的一个需求清除应用内缓存的数据,可以让用户选择删除应用内产生...

modabobo 640

Android开发,获取当前手机安装的所有应用、根据包名获取应用信息、获取当前应用程序的包名、获取程序 图标等关于安装在手机上的

Android开发,获取当前手机安装的所有应用、根据包名获取应用信息、获取当前应用程序的包名、获取程序 图标、获取程序的版本号、获取程序的名字、获取程序的权限、获取程序的签名、获取当前包名的 SHA1、将获取到得编码进行16进制转换、获取当前展示 的Activity名称、根据包名打开安装的应用程序、卸载安装的应用程序等关于安装在手机上的三方程序进行操作的根据类。

Android获取安装应用Apk包大小 缓存大小 getPackageSizeInfo StorageManager

获取安装应用Apk包大小、缓存大小以及应用占用存储总大小 可以通过 PackageManager类的getPackageSizeInfo方法获取,但是这个方法被Google标记成隐藏方法,不能直接调用; 解决方法:可以通过反射调用,但在Android8.0及以上通过反射调用会报错,不过Android8.0及以上可以通过StorageManager 获取 Android8.0以下获取Apk大小方法: 通过反射调用getPackageSizeInfo获取 创建AIDL文件 创建文件 IPackageSta

B0xing的博客 4160

国产AI芯动力:复旦微FMQL100TAI900 FPGA原型验证板全解析

本文全面解析了复旦微FMQL100TAI900 FPGA原型验证板在国产AI硬件领域的创新突破。该板卡采用全栈国产化设计,具备出色的AI推理性能、视频处理能力和接口生态,特别适合工业质检、智能交通等场景。文章详细介绍了其芯片架构、存储子系统、接口扩展及电源设计,并分享了实战开发经验,为开发者提供了一套可靠的国产计算平台解决方案。

weixin_29250573的博客 456

基于stm32开发的红外循迹小车

2.L298N电机驱动模块:分别是5V,12V,GND,可以通过外加电源给驱动模块供电,IN1,IN2,IN3,IN4,EN1,EN2,通过给IN口不同的电平,可以达到控制电机正反转,EN口为使能口,可以通过给EN口不同的PWM波,来达到控制小车速度,1.红外循迹模块:检测黑线的原理是向外发射红外线,当没有遇到黑线的时候,返回回来,之后返回高电平,当遇到黑线的时候,红外被吸收,返回高电平,读取相应IO口的电平就可以知道小车此时的大致位置;模块有四个输入接口,分别连接四个TT马达,驱动小车运动;

2301_81374681的博客 1万+

android 获取应用程序(包)的信息和缓存大小 PackageManager的使用

[size=medium][b]PackageManger 类[/b][/size] 说明: 获得已安装的应用程序信息 。可以通过[color=red]getPackageManager()[/color]方法获得。 常用方法: public abstract PackageManager getPackageManager() 功能:获得一个PackageM...

写博客只为学习 390

双有源桥(DAB)进阶:EPS调制策略与Matlab/Simulink仿真实践

本文深入探讨了双有源桥(DAB)的扩展移相(EPS)调制策略及其在Matlab/Simulink中的仿真实践。通过分析EPS的两种黄金调制策略——回流功率消除和电流应力优化,结合实际工程案例,展示了如何提升DAB系统的效率和性能。文章还详细介绍了Simulink模型搭建要点和关键仿真结果,为工程师提供了实用的技术参考。

weixin_33734785的博客 483

Android获取APP缓存大小

APP设置中需要用到获取APP的缓存大小。下面是我简单封装的一个获取APP存储的类供大家参考; public class CacheUtils { public static CacheUtils instance = null; public static CacheUtils getInstance() { if (instance == null) { synchronized (CacheUtils.class) { ...

Tom天天的博客 2537

解决linux 2.5G网卡驱动问题

解决linux 2.5G网卡驱动问题 关键词:2.5G网卡驱动,ubuntu,安装,2.5G Ethernet LINUX driver,Realtek网卡驱动 由于2.5G网卡较新,各linux发行版的通用驱动已不适用,新装的系统会出现无法上网问题,由于国内网络环境去Realtek官网很难下载到驱动文件,故本文提供github上的2.5G Ethernet LINUX driver r8125 for kernel up to 5.6的版本驱动文件r8125-9.003.05.tar.bz2各位可以自

poorguy_aos的博客 1万+

Python 爬虫实战:豆瓣电影海报批量获取(Top250 榜单 + 可视化展示)

在信息爆炸的时代,数据已成为决策的核心,而数据的获取是数据分析的第一步。本文将详细介绍如何利用 Python 爬虫获取豆瓣电影 Top250 榜单的海报,并对数据进行可视化展示,助你更好地了解电影市场的趋势和用户的喜好。

yansideyucsdn的博客 717

Android获取缓存大小和清除缓存功能实现

首先关于缓存清理,网上已经有太多的工具类; 但是遗憾的是,基本上都不完善,或者说根本就不能用,而项目中又要求实现这个烂东西 (其实这玩意真没一点屁用,毕竟第三方清理/杀毒软件都带这么一个功能) package com.cn import android.content.Context; import android.os.Envi...

会飞的小驴粪蛋 6284

博图SCL基础知识-寻址调用及新建SCL

和LAD/FBD不同,LAD/FBD在程序编辑器是一段一段的,编辑器可以插入新的网络段,每一个网络段可以有各自的注释。一般情况下,FB的简单数据类型形参可以没有对应实参,复杂数据类型的输入、输出也可以没有对应实参,所以FB可以隐藏或不隐藏不出现的形参。一般情况下,FB的简单数据类型形参可以没有对应实参,复杂数据类型的输入、输出也可以没有对应实参,所以FB可以隐藏或不隐藏不出现的形参。如图3所示,当FB的参数全部显示,在背景数据块右键可以激活"仅显示分配的参数";如图2所示,显示了一些FB调用的例子。

电工 2029

Android 程序常用功能《清除缓存》

使用过程中可能会遇到应用程序或软件更新失败,因为用户的智能手机存储空间不足。 由于应用程序崩溃和其他问题,用户的数字设备运行速度比以前慢。 所有这些问题都是由于用户的存储空间不足造成的。 实际上,即使用户购买了128 GB或256 GB的手机,删除垃圾文件仍然很重要 在Android手机上 定期。因此,本文给大家分享一下,在研发app中常用的清除缓存数据和应用数据的功能如何实现? 缓存数据表示应用或网站存储在Android手机或平板电脑中的所有媒体文件。 因此,每次使用应用程序时,它都会自动保存包括文件,图

拉莫帅的博客 6860

基于STM32+ESP8266+手机 APP+阿里云的智能小车设计与实现(项目资料ID:4)

本研究旨在设计一款高度智能化的智能小车系统,通过集成 STM32 微控制器、ESP8266 无线模块、手机 APP 以及阿里云平台,实现环境数据实时采集、远程精准控制和高效的数据交互。详细阐述系统各部分的设计原理、实现过程和测试结果,验证系统在实际应用中的可行性和有效性,为智能小车在多领域的应用提供技术支持。

以培养嵌入式工程师为己任 1万+

华为OD机试真题 新系统【网络数据包收发处理】

华为OD机试 新系统真题【网络数据包收发处理】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【网络数据包收发处理】多语言题解。

qq_45776114的博客 444

android_获取缓存大小和清除缓存功能

Android开发记录20-获取缓存大小和清除缓存功能 转载请注明:IT_xiao小巫  博客地址:http://blog.youkuaiyun.com/wwj_748 前言 本篇博客要给大家分享的如何获取应用缓存的大小和清除缓存的功能,我们知道我们应用当中经常会产生一些数据,比如图片的缓存,数据库文件,配置文件等等。我们开发产品的时候,可能会有这样的一个需求清除应用内缓存的数据,可以

hdq_123的博客 264

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

android 获取所有的缓存大小,Android 获取缓存大小及清除

获取缓存的方法:// 递归public static long getFileSize(File f) throws Exception// 取得文件夹大小{long size = 0;File flist[] = f.listFiles();for (int i = 0; i < flist.length; i++) {if (flist[i].isDirectory()) {size =...

weixin_34410975的博客 788

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Android 获取缓存大小和清除缓存

工具类 public class DataCleanManagerUtils { /** * 获取缓存大小 * * @param context * @return * @throws Exception */ public static String getTotalCacheSize(Context contex...

liu1102860169的博客 1384

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android计算缓存大小和清除缓存

在某些应用上我们经常能够看到清除缓存的功能,这是为了清空该APP内的应用数据,释放内存的作用。下面先说说如何来获取缓存的大小, 1,计算获取缓存数据大小:         public void initView() throws Exception { //获取内存的大小 long cacheSize = getFolderSize(getCacheDir()); if

Running的博客 1713

android缓存清理代码,安卓缓存清除和计算

官方提供的方法中,计算缓存和清除缓存 貌似对安卓系统没有效果,以下是采用原生安卓提供的方法,供有需要的同学参考,自己只有一台魅族手机,不知在其他机型上是否通用。以下是代码:var Intent = null,File = null,Uri = null,main = null;var cacheCaleState=false;var os=null;mui.plusReady(function()...

weixin_29011395的博客 1339

Android开发记录20-获取缓存大小和清除缓存功能

转载请注明:IT_xiao小巫 博客地址:http://blog.youkuaiyun.com/wwj_748 前言 本篇博客要给大家分享的如何获取应用缓存的大小和清除缓存的功能,我们知道我们应用当中经常会产生一些数据,比如图片的缓存,数据库文件,配置文件等等。我们开发产品的时候,可能会有这样的一个需求清除应用内缓存的数据,可以让用户选择删除应用内产生的数据,这也是比较人性化的设计点。例如笔者参

来啊 快活啊 1169

android清除sp缓存,android获取缓存大小和清除缓存

packagecom.jianong.xmtt.util;importandroid.content.Context;importandroid.os.Environment;importjava.io.File;importjava.math.BigDecimal;/*** Created by hgl on 2016/6/23.*/public classDataCleanManager {/...

weixin_34688479的博客 1079

android获取缓存大小并且清除缓存

android中常常会用到获取缓存大小显示在某个地方,然后给一个控件一个监听清除缓存

baidu_32015283的博客 545
上一篇: Android之用PopupWindow实现弹出菜单
下一篇: ViewPager,实现真正的无限循环(定时+手动)
PiCheeng
博客等级 码龄15年 3粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值