獲取應用的緩存信息

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 一鍵清理 開源版,包括內存加速,緩存清理,自啓管理,軟件管理等。

發佈了37 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章