/**
* 获取正在运行的进程信息
*
* @return
*/
public static ArrayList<ProcessInfo> getProcessInfo(Context context) {
// 存放全部信息
ArrayList<ProcessInfo> infos = new ArrayList<ProcessInfo>();
// 获取活动管理器
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
PackageManager packageManager = context.getPackageManager();
// 获取正在运行的进程信息
List<RunningAppProcessInfo> runningAppProcesses = am
.getRunningAppProcesses();
// 遍历所有 进程
for (RunningAppProcessInfo runningAppProcessInfo : runningAppProcesses) {
// 进程名字 一般和包名一样
String processName = runningAppProcessInfo.processName;
// 进程的id
int pid = runningAppProcessInfo.pid;
Drawable icon = null;
String name = null;
long memSize = 0;
boolean isSys = false;
try {
// 获取一个应用的ApplicationInfo 对象
ApplicationInfo applicationInfo = packageManager
.getApplicationInfo(processName, 0);
icon = applicationInfo.loadIcon(packageManager);// 图片
name = applicationInfo.loadLabel(packageManager).toString();// 名字
if ((applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == ApplicationInfo.FLAG_SYSTEM) {
// 是系统进程
isSys = true;
} else {
// 是用户进程
isSys = false;
}
} catch (NameNotFoundException e) {
e.printStackTrace();
// 包名:am
// 系统进程
// 给一些默认值
name = processName;
icon = context.getResources().getDrawable(
R.drawable.ic_launcher);
// 认为是系统进程
isSys = true;
}
int[] pids = new int[] { pid };
// 获取指定pid的进程内存信息 这里可以获取多个
android.os.Debug.MemoryInfo[] processMemoryInfo = am
.getProcessMemoryInfo(pids);
// 获取内存大小
memSize = processMemoryInfo[0].getTotalPss() * 1024;
ProcessInfo info = new ProcessInfo(name, icon, memSize, isSys,
processName);
infos.add(info);
}
return infos;
}