释放内存实现

来源:互联网 发布:linux 软件安装 编辑:程序博客网 时间:2024/05/18 14:45

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方法



原创粉丝点击