/**
* 获取包名的应用缓存 在生命周期方法onCreate中先调用一次getCacheSize( );
PackageManager pm = getActivity().getPackageManager();
List<PackageInfo> infos = pm.getInstalledPackages(0);
for (PackageInfo info : infos) {
getCacheSize(info);
}
* @param packgeName
*/public void getCacheSize(PackageInfo packgeInfo) {
try {
Method myUserId = UserHandle.class.getDeclaredMethod("myUserId");
// 4.2 后需要一个int 类型的参数 从UserHandle(解释:应再保险用户信息)中获取
int userID = (Integer) myUserId.invoke(pm,null);
Method method = PackageManager.class.getDeclaredMethod("getPackageSizeInfo", String.class, int.class, IPackageStatsObserver.class);
method.invoke(pm, packgeInfo.packageName, userID, new MyPackObserver(packgeInfo));
} catch (Exception e) {
e.printStackTrace();
}
}private class MyPackObserver extends android.content.pm.IPackageStatsObserver.Stub{
private PackageInfo packgeInfo;
public MyPackObserver(PackageInfo info){
this.packgeInfo = info;
}@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
throws RemoteException {
long cachesize = pStats.cacheSize;//缓存大小
long datasize = pStats.dataSize;//数据大小
long codesize = pStats.codeSize;//应用代码(包)大小
if (flag == true) {//有的应用是默认有12KB缓存的 清理不了,只能加个判断
//flag  是否第一次清理缓存,true: 是   ,  false: 不是;   第一次清理操作过后flag =false;
if (cachesize > 0) {
CacheInfo info = new CacheInfo();//实例化创建的bean对象
info.setAppName(packgeInfo.applicationInfo.loadLabel(pm).toString());
info.setIcon(packgeInfo.applicationInfo.loadIcon(pm));
info.setCacheSize(cachesize);
cacheInfos.add(info); //cacheInfos是一个List<CacheInfo> //视图布局使用List View还是其他自定一个,显示时return cacheInfos.size();
}
} else {
if (cachesize > 12288) {//大于12KB  //第二次清理获取  排除默认有12KB缓存的应用
CacheInfo info = new CacheInfo();
info.setAppName(packgeInfo.applicationInfo.loadLabel(pm).toString());
info.setIcon(packgeInfo.applicationInfo.loadIcon(pm));
info.setCacheSize(cachesize);
cacheInfos.add(info);
}
}
}
}/**
*bean对象 最好单独创建一个类
*/public class CacheInfo {
private String appName;
private long cacheSize;
private String packgeName;
private long dataSize;
private long codeSize;
private Drawable icon;
// get( ) -- set( ) -- 以及toStirng( )方法省约
}/**
* 清理缓存
*/private void deleteAllCache() {
Method[] methods = PackageManager.class.getMethods();
Long localLong = Long.valueOf(getEnvironmentSize() - 1L);
Object[] arrayOfObject = new Object[2];
arrayOfObject[0] = localLong;
for(Method method : methods){
if( "freeStorageAndNotify".equals(method.getName()) ) {
try {
method.invoke(pm, localLong, new MyPackageDataObserver());//Integer.MAX_VALUE * 100 实测不适合真机4.2版本以上换成localLong,
} catch (Exception e) {
e.printStackTrace();
}
return;
}
}
}/**
* @return 所有缓存数据
*/private long getEnvironmentSize() {
File localFile = Environment.getDataDirectory();
long l1;
if (localFile == null)
l1 = 0L;
while (true) {
String str = localFile.getPath();
StatFs localStatFs = new StatFs(str);
long l2 = localStatFs.getBlockSize();
l1 = localStatFs.getBlockCount() * l2;
return l1;
}}private class MyPackageDataObserver extends IPackageDataObserver.Stub{
@Overridepublic void onRemoveCompleted(String packageName, boolean succeeded) throws RemoteException {getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
//清理完成 执行UI操作
});
}
}

如果导不了IPackageStatsObserver, IPackageDataObserver 包 参照图片上做

之前没有创建github项目,我的demo地址:GitHub - YangSion/RunAndroid: 系统工具:手机检测,缓存清理,进程释放与软件管理

android缓存清理相关推荐

  1. android缓存清理无效,Android开发之清理系统缓存错误

    最近在做清理系统缓存功能时,用到以下方法PackageManager pm = context.getPackageManager(); Method localMethod = pm.getClas ...

  2. Android 手机app缓存清理实现

    前言 说道Android app清理缓存,那就要先了解缓存在哪个地方,以及如何去获取到缓存路径,和清理这个路径中的缓存. 需要提前了解的知识 系统文件(注:这个是系统的文件系统,不允许修改的) 内置S ...

  3. Android Glide数据更新及内存缓存、硬盘缓存清理

    [转] 原文                                         Android Glide数据更新及内存缓存.硬盘缓存清理 Android的Glide在加载图片时候内部默 ...

  4. Android APP存储路径和缓存清理规范

    1. Android APP统一存储数据规范 基于Android系统对存储卡访问的各种特性,在充分保证基线的产品交互体验前提下,定义Android APP各业务开发中的可选存储路径,对应存储特性,各自 ...

  5. Android开发实战《手机安全卫士》——13.“缓存清理”模块实现

    文章目录 1.缓存清理--获取缓存过程 2.缓存清理--获取有缓存的应用 & 添加到线性布局 3.缓存清理--获取缓存界面进度条更新 4.缓存清理--清理缓存功能 5.缓存清理--单个应用缓存 ...

  6. android垃圾清理动画,Android 6.0系统 内存和缓存清理及相关动画

    前言 最近,做了一个清理android系统(基于6.0的一个定制系统)的内存等清理相关的模块,里面涉及到该系统的运行的相关进程清理和各个应用的缓存清理(提前说一下,需要系统签名,然后push 到系统目 ...

  7. android之循环定时器实现,实现定Android时缓存清理

    目录 android之循环定时器实现 缓存清理 查看缓存大小CacheDataManager.getTotalCacheSize(getApplicationContext())); 启动缓存清理Ca ...

  8. android清理缓存功能吗,android实现清理缓存功能

    android之清理缓存实现,供大家参考,具体内容如下 一. 清理缓存首先要搞清楚清理哪些东西 1.app本身的功能比如录像,录音,更新都会产生文件,需要清理 2.app的默认缓存地址cache 二. ...

  9. android webview清理缓存

    android webview清理缓存 最近写了个Android项目 遇到了一个问题就是webview 的缓存问题 每次进入程序webview都用缓存.接下来说说这问题是如何解决的. 首先了解下缓存的 ...

最新文章

  1. 归并排序及C语言实现
  2. Windows如何安装MSMQ消息队列
  3. 判断 服务器架构性能 数据,服务器架构之性能扩展-第五章(6)
  4. LeetCode 21. 合并两个有序链表 golang
  5. 如何查看Laravel版本号的三种方法
  6. 基于php的选课系统设计(含源文件)
  7. 办公自动化-python编写ppt-创建第一页-主标题与内容的编写
  8. SpringBoot MySql Druid配置主从数据源(多个数据源)
  9. Swift数据类型(五)
  10. npm -S -D -g i 有什么区别
  11. 怎么测试本地网页在不同分辨率下电脑显示效果_4K商用超值利器 飞利浦272P7VPTKEB显示器评测...
  12. 二叉树遍历算法之三:后序遍历
  13. C语言实战例题:必会的 10 个C语言经典练习题,源码分享
  14. 疯狂Java讲义笔记整理
  15. ipqc的工作流程图_IPQC的工作流程及检验流程
  16. snmp No Such Instance currently exists at this OID
  17. 在自己电脑上调试微信公众号后台程序:附工具
  18. jQuery中index的用法
  19. php保存文件乱码,如何解决php保存文件乱码的问题
  20. Windows简体系统和繁体系统下的乱码处理

热门文章

  1. MAC-允许任何来源没有了怎么办
  2. 训练集,验证集,测试集,泛化误差总结
  3. C Sharp进行全站仪的圆曲线整桩位计算
  4. c语言 ——int16,c语言中int取值范围为16位指的是什么16位
  5. linux 部署调用SAP接口
  6. 智能电视—小米的下一个战场?
  7. 数据挖掘案例一:窃漏电用户的识别
  8. MPTCP 源码分析(三) 子路径选择
  9. AutoCAD .NET: EntityJig – Dynamic Dimension and Line Jig
  10. chromeF12 谷歌开发者工具详解(转载)