android缓存清理
/**
* 获取包名的应用缓存 在生命周期方法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缓存清理相关推荐
- android缓存清理无效,Android开发之清理系统缓存错误
最近在做清理系统缓存功能时,用到以下方法PackageManager pm = context.getPackageManager(); Method localMethod = pm.getClas ...
- Android 手机app缓存清理实现
前言 说道Android app清理缓存,那就要先了解缓存在哪个地方,以及如何去获取到缓存路径,和清理这个路径中的缓存. 需要提前了解的知识 系统文件(注:这个是系统的文件系统,不允许修改的) 内置S ...
- Android Glide数据更新及内存缓存、硬盘缓存清理
[转] 原文 Android Glide数据更新及内存缓存.硬盘缓存清理 Android的Glide在加载图片时候内部默 ...
- Android APP存储路径和缓存清理规范
1. Android APP统一存储数据规范 基于Android系统对存储卡访问的各种特性,在充分保证基线的产品交互体验前提下,定义Android APP各业务开发中的可选存储路径,对应存储特性,各自 ...
- Android开发实战《手机安全卫士》——13.“缓存清理”模块实现
文章目录 1.缓存清理--获取缓存过程 2.缓存清理--获取有缓存的应用 & 添加到线性布局 3.缓存清理--获取缓存界面进度条更新 4.缓存清理--清理缓存功能 5.缓存清理--单个应用缓存 ...
- android垃圾清理动画,Android 6.0系统 内存和缓存清理及相关动画
前言 最近,做了一个清理android系统(基于6.0的一个定制系统)的内存等清理相关的模块,里面涉及到该系统的运行的相关进程清理和各个应用的缓存清理(提前说一下,需要系统签名,然后push 到系统目 ...
- android之循环定时器实现,实现定Android时缓存清理
目录 android之循环定时器实现 缓存清理 查看缓存大小CacheDataManager.getTotalCacheSize(getApplicationContext())); 启动缓存清理Ca ...
- android清理缓存功能吗,android实现清理缓存功能
android之清理缓存实现,供大家参考,具体内容如下 一. 清理缓存首先要搞清楚清理哪些东西 1.app本身的功能比如录像,录音,更新都会产生文件,需要清理 2.app的默认缓存地址cache 二. ...
- android webview清理缓存
android webview清理缓存 最近写了个Android项目 遇到了一个问题就是webview 的缓存问题 每次进入程序webview都用缓存.接下来说说这问题是如何解决的. 首先了解下缓存的 ...
最新文章
- 归并排序及C语言实现
- Windows如何安装MSMQ消息队列
- 判断 服务器架构性能 数据,服务器架构之性能扩展-第五章(6)
- LeetCode 21. 合并两个有序链表 golang
- 如何查看Laravel版本号的三种方法
- 基于php的选课系统设计(含源文件)
- 办公自动化-python编写ppt-创建第一页-主标题与内容的编写
- SpringBoot MySql Druid配置主从数据源(多个数据源)
- Swift数据类型(五)
- npm -S -D -g i 有什么区别
- 怎么测试本地网页在不同分辨率下电脑显示效果_4K商用超值利器 飞利浦272P7VPTKEB显示器评测...
- 二叉树遍历算法之三:后序遍历
- C语言实战例题:必会的 10 个C语言经典练习题,源码分享
- 疯狂Java讲义笔记整理
- ipqc的工作流程图_IPQC的工作流程及检验流程
- snmp No Such Instance currently exists at this OID
- 在自己电脑上调试微信公众号后台程序:附工具
- jQuery中index的用法
- php保存文件乱码,如何解决php保存文件乱码的问题
- Windows简体系统和繁体系统下的乱码处理