获取应用的缓存信息

来源:互联网 发布:有趣的java小程序 编辑:程序博客网 时间:2024/05/17 04:25
public class CacheInfoProvider {    private Handler handler;    private PackageManager packageManager;//包管理器    private Vector<CacheInfo> cacheInfos;    private int size = 0;    public CacheInfoProvider(Handler handler, Context context) {        //拿到一个包管理器        packageManager = context.getPackageManager();        this.handler = handler;        cacheInfos = new Vector<CacheInfo>();    }    public void initCacheInfos() {        //获取所有已经安装了的应用的信息,包括哪些安装后卸载的但是没有清除数据的应用;        List<PackageInfo> packageInfos = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);        size = packageInfos.size();        for (int i = 0; i < size; i++) {            PackageInfo packageInfo = packageInfos.get(i);            CacheInfo cacheInfo = new CacheInfo();            //拿到包名            String packageName = packageInfo.packageName;            cacheInfo.setPackageName(packageName);            //拿到应用程序的信息            ApplicationInfo applicationInfo = packageInfo.applicationInfo;            //拿到应用程序的程序名            String name = applicationInfo.loadLabel(packageManager).toString();            cacheInfo.setPackageName(name);            //拿到应用程序的图标            Drawable icon = applicationInfo.loadIcon(packageManager);            cacheInfo.setIcon(icon);            initDataSize(cacheInfo, i);//数据大小        }    }    private void initDataSize(final CacheInfo cacheInfo, final int position) {        try {            Method method = PackageManager.class.getMethod(                    "getPackageSizeInfo", new Class[]{String.class,                            IPackageStatsObserver.class});            method.invoke(packageManager,                    new Object[]{cacheInfo.getPackageName(),                            new IPackageStatsObserver.Stub() {                                @Override                                public void onGetStatsCompleted(                                        PackageStats pStats, boolean succeeded)                                        throws RemoteException {                                    System.out.println("onGetStatsCompleted" + position);                                    long cacheSize = pStats.cacheSize;                                    long codeSize = pStats.codeSize;                                    long dataSize = pStats.dataSize;                                    cacheInfo.setCacheSize(TextFormater                                            .dataSizeFormat(cacheSize));                                    cacheInfo.setCodeSize(TextFormater                                            .dataSizeFormat(codeSize));                                    cacheInfo.setDataSize(TextFormater                                            .dataSizeFormat(dataSize));                                    cacheInfos.add(cacheInfo);                                    if (position == (size - 1)) {                                        // 当完全获取完信息之后,发送一个成功的消息                                        // 1对应的就是CacheClearActivity里面的FINISH                                        handler.sendEmptyMessage(1);                                    }                                }                            }});        } catch (Exception e) {            e.printStackTrace();        }    }    public Vector<CacheInfo> getCacheInfos() {        return cacheInfos;    }    public void setCacheInfos(Vector<CacheInfo> cacheInfos) {        this.cacheInfos = cacheInfos;    }}

以上相关信息总结于:https://github.com/joyoyao/superCleanMaster 一键清理 开源版,包括内存加速,缓存清理,自启管理,软件管理等。

0 0
原创粉丝点击