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