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