利用反射获得程序的缓存大小、应用程序大小、数据大小,利用反射清除缓存,全部清理
来源:互联网 发布:java utc时间转换 在线 编辑:程序博客网 时间:2024/06/05 15:59
系统隐藏了获得缓存的getPackageSizeInfo方法,我们可以用反射来调用该方法。
读取缓存文件大小需要添加权限:GET_PACKAGE_SIZE
首先将IPackageStatsObserver.aidl和PackageStats.aidl文件拷贝到android.content.pm包下。
再反射获得方法,后调用
Method getPackageSizeInfoMethod = null;Method[] methods = PackageManager.class.getMethods();for (Method method : methods) {if("getPackageSizeInfo".equals(method.getName())){getPackageSizeInfoMethod = method;}}List<PackageInfo> infos = pm.getInstalledPackages(0);for (PackageInfo info : infos) {try {getPackageSizeInfoMethod.invoke(pm, info.packageName,new myObserver());} catch (Exception e) {e.printStackTrace();}}
该方法后一个参数用到远程服务,写一个类继承远程服务:
private class myObserver extends IPackageStatsObserver.Stub{@Overridepublic void onGetStatsCompleted(PackageStats pStats, boolean succeeded)throws RemoteException {//缓存大小long cacheSize = pStats.cacheSize;//应用程序大小long codeSize = pStats.codeSize;//数据大小long dataSize = pStats.dataSize;其他处理}}
利用反射删除缓存:
删除缓存文件需要添加权限:DELETE_CACHE_FILES
这个权限只能是系统程序才能用,所以,我们用不了。。。
iv_delete.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {try {Method method = PackageManager.class.getMethod("deleteApplicationCacheFiles", String.class,IPackageDataObserver.class);method.invoke(pm, pStats.packageName,new IPackageDataObserver.Stub(){@Overridepublic void onRemoveCompleted(String packageName, boolean succeeded)throws RemoteException {}});} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}});
普通软件是点击弹到系统设置界面,手动清理。
全部清理:
利用反射得到freeStorageAndNotify方法,一键清理
Method[] methods = PackageManager.class.getMethods();for (Method method : methods) {if("freeStorageAndNotify".equals(method.getName())){try {//请求释放最大空间method.invoke(pm, Long.MAX_VALUE,new IPackageDataObserver.Stub(){@Overridepublic void onRemoveCompleted(String packageName, boolean succeeded)throws RemoteException {}});} catch (Exception e) {e.printStackTrace();}return;}}
0 0
- 利用反射获得程序的缓存大小、应用程序大小、数据大小,利用反射清除缓存,全部清理
- 96利用反射获取缓存和应用程序的大小信息
- 109_利用反射调用隐藏api获取应用程序的缓存大小
- android 获得各个应用程序缓存大小和清除全部应用缓存
- 98利用反射清理应用程序的缓存以及清理所有应用程序的缓存
- SDWebImage/SDImageCache 获得缓存大小,清理缓存。
- app缓存数据的大小和清除
- iOS 缓存大小 清理
- 获取缓存的大小 以及清理缓存
- 获取缓存的大小并且清理缓存
- Android应用数据、缓存的清除和获取缓存大小
- 获取缓存的大小和清除缓存
- 获取缓存大小+清除缓存大小
- 清除缓存,计算缓存大小
- 清除缓存计算缓存大小
- 计算缓存大小+清除缓存
- 利用反射获取Camera支持尺寸大小
- 安卓计算应用程序缓存大小以及清除缓存
- Dom4j读取XML
- java写入XML
- 解决错误:Re-installation failed due to different application signatures
- 断言的使用
- properties的读取及HSQL的学习(一)
- 利用反射获得程序的缓存大小、应用程序大小、数据大小,利用反射清除缓存,全部清理
- properties的读取及HSQL的学习(二)
- 获取浏览器信息JS
- java代码规范(一)
- 代码规范(二)
- 字符转码过滤器
- sitemesh的初步使用
- 深入剖析Redis RDB持久化机制
- 敏感字词过滤及错误拼写纠正过滤器