Android系统缓存相关
2015-09-01 01:30
579 查看
1. 如何获取每个应用的缓存文件及大小
IPackageStatsObserver.Stub 的引入.手动建android.content.pm包拷贝文件到此目录下
2. 如何清空缓存?可以使用上面类似的方法反射进行相关的操作,但是此操作需要系统级别的应用才可以清理,市面上的软件如何做到清理的呢?跳到应用信息页去手动的清理,但是市面上的软件做到了可以清理全部缓存文件,利用了Android系统的一个机制,当向系统申请空间(很大超过了目前系统空闲的大小)时,如果系统没有足够的空间可供使用,系统会删除所有应用的缓存文件,进而做到了清理全部缓存文件的目的。
IPackageDataObserver.Stub获取与IPackageStatsObserver.Stub类似
PackageManager pm = context.getPackageManager(); try { Method mmethod = PackageManager.class.getMethod("getPackageSizeInfo", String.class,IPackageStatsObserver.class); List<PackageInfo> packageInfos = pm.getInstalledPackages(0); // 数据变化的观察者,来自IPackageStatsObserver.Stub DataChangedObserver dataChangedObserver = new DataChangedObserver(); for (PackageInfo packageInfo : packageInfos) { // 系统的方法背hide,因此使用反射机制来获取该方法 mmethod.invoke(pm, packageInfo.packageName, dataChangedObserver); } } catch (Exception e) { e.printStackTrace(); }
/** * 扫描结果的观察者 需要权限 <uses-permission * android:name="android.permission.GET_PACKAGE_SIZE"/> * * @author chenhao24 * */ private class DataChangedObserver extends IPackageStatsObserver.Stub { @Override public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException { if (!succeeded) { return; } // 获取缓存大小 long cacheSize = pStats.cacheSize; // 获取应用的名称 String packageName = pStats.packageName; } }
IPackageStatsObserver.Stub 的引入.手动建android.content.pm包拷贝文件到此目录下
2. 如何清空缓存?可以使用上面类似的方法反射进行相关的操作,但是此操作需要系统级别的应用才可以清理,市面上的软件如何做到清理的呢?跳到应用信息页去手动的清理,但是市面上的软件做到了可以清理全部缓存文件,利用了Android系统的一个机制,当向系统申请空间(很大超过了目前系统空闲的大小)时,如果系统没有足够的空间可供使用,系统会删除所有应用的缓存文件,进而做到了清理全部缓存文件的目的。
PackageManager pm = context.getPackageManager(); try { // 使用反射 Method mmethod = PackageManager.class.getMethod("freeStorageAndNotify", Long.class,IPackageDataObserver.class); mmethod.invoke(pm, Integer.MAX_VALUE,new ApplyDataObserver()); } catch (Exception e) { e.printStackTrace(); }
/** * 申请空间,消除缓存的数据观察者 * @author chenhao24 * */ private class ApplyDataObserver extends IPackageDataObserver.Stub{ @Override public void onRemoveCompleted(String packageName, boolean succeeded)throws RemoteException { if(! succeeded){ Log.i(TAG,"release sys cache error"); return; } Log.i(TAG,"release sys cache success"); } }
IPackageDataObserver.Stub获取与IPackageStatsObserver.Stub类似
相关文章推荐
- android studio下的NDK开发详解(一)
- Android简单自定义标题栏
- android SDK manager 无法获取更新版本列表
- Android Spinner
- Android中AsyncTask的依赖执行用法
- Android开发环境的建立
- Android Low Memory 测试工具 Eat Memory
- Android各种View的下拉刷新与加载更多
- android-wheel三级联动
- Android Api Demos登顶之路(五十四)Service LocalService Binding
- 如何获取到Android控件的高度
- Android 如何让EditText不自动获取焦点
- android:gravity和android:layout_Gravity的区别
- android中toast使用注意事
- Android-实现汉字转拼音支持一词多音
- 无线安全Android小工具
- 第一次启动AVD失败了
- Android的内部存储和外部存储
- <Android>界面美化的一点点积累
- Android Activity Task taskAffinity launchMode 之间的关系