释放内存实现

360等的释放内存功能其实就是杀后台进程

	public static String realeseMM(Context context,String whitePkg){
		try {
			long releaseMM = 0;
			  ActivityManager activityManager = (ActivityManager) context
			        .getSystemService(Context.ACTIVITY_SERVICE);
			//获取系统中所有正在运行的进程
			 List<RunningAppProcessInfo> appProcessInfos = activityManager
			                  .getRunningAppProcesses();
			 for (RunningAppProcessInfo appProcessInfo : appProcessInfos) {
				 final String processName=appProcessInfo.processName;
				 if(processName.startsWith(context.getPackageName())||processName.equals(whitePkg)||appProcessInfo.importance<ActivityManager.RunningAppProcessInfo.IMPORTANCE_PERCEPTIBLE){
					 continue;
				 }
				 
				 MemoryInfo[] memoryInfo = activityManager.getProcessMemoryInfo(new int[]{appProcessInfo.pid});
				 if(memoryInfo[0].getTotalPss()==0){
					 continue;
				 }
				 releaseMM += memoryInfo[0].getTotalPrivateDirty()*1000;
				 
				 activityManager.killBackgroundProcesses(processName);
			 }
			 String releaseStr = FileUtil.FormetFileSize(releaseMM);
			 return "为您优化了"+releaseStr+"内存";
		} catch (Exception e) {
			return null;
		}
	}

注意 {@link android.Manifest.permission#KILL_BACKGROUND_PROCESSES} 权限

其中,MemoryInfo中的获取内存三个方法的值对应如下

PSS  getTotalPss  
USS  getTotalPrivateDirty 
RSS  getTotalSharedDirty

具体可以参考 http://blog.csdn.net/adaptiver/article/details/7084364 这里对PSS,USS,RSS的解释。

虽然我更倾向拿PSS的值,但是,USS的值和小米系统释放内存后获得值接近,当然也可能和人家的实现原理本身就不同,系统级应用的应用可能会使用forceStopPackage方法



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值