清理应用程序缓存

1、获取应用程序缓存信息

2、清理缓存(也可以不用步骤1,直接清理,步骤1只是为了知道哪些程序有缓存)

1)

Method getPackageSizeInfo = pm.getClass().getMethod("getPackageSizeInfo", String.class, IPackageStatsObserver.class);   
			List<ApplicationInfo> application = new ArrayList();
			application = pm.getInstalledApplications(0);
			for(int i=0;i<application.size();i++)
			{
				ApplicationInfo app = application.get(i);
				getPackageSizeInfo.invoke(pm, app.packageName,  new IPackageStatsObserver.Stub() 
				{   
					@Override  
					public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException 
					{   
						if(pStats.cacheSize != 0)
						{
							cacheSize += pStats.cacheSize;
							Log.e(TAG, "cacheSize: " + pStats.packageName + "  ;" + pStats.cacheSize); 
						}
					}   
				});
			}


上面的方法 通过反射机制获取应用程序的缓存信息

2)

Method localMethod = pm.getClass().getMethod("freeStorageAndNotify", Long.TYPE,IPackageDataObserver.class);
			Long localLong = Long.valueOf(getEnvironmentSize() - 1L);
			Object[] arrayOfObject = new Object[2];
		    arrayOfObject[0] = localLong;
		    localMethod.invoke(pm,localLong,new IPackageDataObserver.Stub()
		      {
				@Override
				public void onRemoveCompleted(String packageName,
						boolean succeeded) throws RemoteException 
						{
				}});


同样通过反射,来清除缓存

private long getEnvironmentSize()
    {
      File dataFile = Environment.getDataDirectory();
      if (dataFile == null)
        return 0;
      else
      {
        StatFs localStatFs = new StatFs(dataFile.getPath());
        long l2 = localStatFs.getBlockSize();
        return localStatFs.getBlockCount() * l2;
      }
    }

需要用到3个AIDL:
IPackageDataObserver.aidl 

IPackageStatsObserver.aidl

PackageStats.aidl

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值