清理手机缓存

来源:互联网 发布:理性选民的神话 知乎 编辑:程序博客网 时间:2024/04/30 07:31

           手机缓存清理


需要三个aidl文件:


http://download.csdn.net/detail/chengtaoyan/9171235

代码:(Activity)


private Method getPackageSizeInfo;public void getAppCache() throws InterruptedException {final PackageManager pm = getActivity().getPackageManager();try {getPackageSizeInfo = PackageManager.class.getDeclaredMethod("getPackageSizeInfo", String.class,IPackageStatsObserver.class);getPackageSizeInfo.setAccessible(true);} catch (NoSuchMethodException e) {e.printStackTrace();}List<PackageInfo> packageInfos = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);final List<RunningProcess> itemList = new ArrayList<RunningProcess>();final CountDownLatch countDownLatch = new CountDownLatch(packageInfos.size());try {for (PackageInfo info : packageInfos) {final PackageInfo packageInfo = info;getPackageSizeInfo.invoke(pm, info.packageName,new IPackageStatsObserver.Stub() {@Overridepublic void onGetStatsCompleted(PackageStats pStats, boolean succeeded)throws RemoteException {if (succeeded && pStats != null) {RunningProcess item = new RunningProcess();item.setMemorySize(pStats.cacheSize);item.setAppName(packageInfo.applicationInfo.loadLabel(pm).toString());item.setIcon(packageInfo.applicationInfo.loadIcon(pm));itemList.add(item);}synchronized (countDownLatch) {countDownLatch.countDown();}}});}} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}countDownLatch.await();//将数据显示在列表上list.addAll(itemList);adapter.notifyDataSetChanged();}


/** * 一键清理 */private Method freeStorageAndNotify;@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2)public void doClean() {try {freeStorageAndNotify = PackageManager.class.getDeclaredMethod("freeStorageAndNotify", Long.TYPE,IPackageDataObserver.class);} catch (NoSuchMethodException e) {e.printStackTrace();}PackageManager pm = getActivity().getPackageManager();File loadData = Environment.getDataDirectory();if (loadData == null) {return;}StatFs statFs = new StatFs(loadData.getAbsolutePath());// long size = statFs.getBlockCount()*statFs.getBlockSize();long size = statFs.getBlockCountLong() * statFs.getBlockSizeLong();try {freeStorageAndNotify.invoke(pm, size,new IPackageDataObserver.Stub() {@Overridepublic void onRemoveCompleted(String packageName,boolean succeeded) throws RemoteException {Toast.makeText(getActivity(), "清理成功", Toast.LENGTH_LONG).show();}});} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}


Ok

1 0
原创粉丝点击