android缓存清理
来源:互联网 发布:网络统考大学英语b 编辑:程序博客网 时间:2024/05/17 00:56
/**
* 获取包名的应用缓存 在生命周期方法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;
}
@Override
@Override
public void run() {
//清理完成 执行UI操作
});
}
}
http://download.csdn.net/detail/xyyyxyyyx/7617415
* 获取包名的应用缓存 在生命周期方法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;
}
}
@Override
public void onRemoveCompleted(String packageName, boolean succeeded) throws RemoteException {
getActivity().runOnUiThread(new Runnable() {@Override
public void run() {
//清理完成 执行UI操作
});
}
}
如果导不了IPackageStatsObserver, IPackageDataObserver 包 参照图片上做
http://download.csdn.net/detail/xyyyxyyyx/7617415
http://www.bvbcode.com/cn/c0fmsirg-1806530-down
之前没有创建github项目,我的demo地址:https://github.com/CMythYang/RunAndroid
0 0
- android 缓存 清理
- Android清理软件缓存
- Android清理webview缓存
- Android 清理应用缓存
- Android 清理应用缓存
- android---清理应用缓存
- android 清理缓存
- android缓存清理
- Android 清理应用缓存
- android缓存清理
- Android缓存数据清理
- android app缓存清理
- android app清理缓存
- 如何清理Android应用缓存
- Android清理缓存功能实现
- android开发之清理缓存
- Android代码实现清理缓存
- Android清理缓存工具类
- Mysql varchar VS Oracle varchar2
- OGNL
- C++ 数据结构 广义表
- 栈和队列 相关 面试题
- (二分查找思想)从有序递增旋转数组45679123 中找到数字6的位置
- android缓存清理
- Linux 常见环境变量、文件类型、权限管理
- JavaWeb学习之注册登录功能实现过程中出现的问题及解决
- JDK1.8新特性--之默认接口
- Linux 中find命令与文件权限
- 记录前端学习的过程中值得收藏的文章
- linux下mysql启动问题
- Vim(Linux编辑器)简单配置和常用命令
- HashTable-哈希表/散列表