获取应用的缓存信息

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 一键清理 开源版,包括内存加速,缓存清理,自启管理,软件管理等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值