package cn.jianhaozhan.engine;
import java.util.ArrayList;
import java.util.List;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.drawable.Drawable;
import android.os.Debug.MemoryInfo;
import cn.jianhaozhan.bean.TaskInfo;
public class TaskEngine {
public static List<TaskInfo> getTaskAllInfo(Context context){
List<TaskInfo> list=new ArrayList<TaskInfo>();
//进程管理者
ActivityManager activityManager=(ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
PackageManager pm=context.getPackageManager();
//获取所有正在运行的进程信息
List<RunningAppProcessInfo> runningAppProcessInfos=activityManager.getRunningAppProcesses();
//遍历集合
for (RunningAppProcessInfo runningAppProcessInfo : runningAppProcessInfos) {
TaskInfo taskInfo=new TaskInfo();
//获取相应信息
//获取进程名称,和包名一样
String packageName = runningAppProcessInfo.processName;
taskInfo.setPackageName(packageName);
//获取进程所占用的内存空间,int[] pids:输入几个进程的pid就返回几个进程所占用的空间,可以返回多个进程所占用的空间
MemoryInfo[] memoryInfo = activityManager.getProcessMemoryInfo(new int[]{runningAppProcessInfo.pid});
int totalPss = memoryInfo[0].getTotalPss();//获取一个以kb为单位的内存占用空间大小
long ramSize=totalPss*1024;//获取到进程占用空间大小,以byte为单位
taskInfo.setRamSize(ramSize);
//根据app的报名获取application信息
try {
ApplicationInfo applicationInfo=pm.getApplicationInfo(packageName, 0);
//获取图标
Drawable icon=applicationInfo.loadIcon(pm);
taskInfo.setIcon(icon);
//获取名称
String name = applicationInfo.loadLabel(pm).toString();
taskInfo.setName(name);
//获取程序的所有标签信息,是否是系统程序是以标签形式展示
int flags = applicationInfo.flags;
//判断是否是用户程序
boolean isUser;
if ((applicationInfo.FLAG_SYSTEM&flags)==applicationInfo.FLAG_SYSTEM) {
//系统程序
isUser=false;
}else{
//用户程序
isUser=true;
}
taskInfo.setUser(isUser);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
//保存信息
list.add(taskInfo);
}
return list;
}
}