1 import java.io.BufferedReader; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.InputStreamReader; 5 import java.util.ArrayList; 6 import java.util.List; 7 8 import android.app.ActivityManager; 9 import android.app.ActivityManager.RunningAppProcessInfo; 10 import android.content.Context; 11 import android.content.pm.ApplicationInfo; 12 import android.content.pm.PackageManager; 13 import android.content.pm.PackageManager.NameNotFoundException; 14 import android.graphics.drawable.Drawable; 15 import android.os.Debug.MemoryInfo; 16 17 import com.android.hzy.mobilesafe.R; 18 import com.android.hzy.mobilesafe.domain.TaskInfo; 19 20 public class TaskUtils { 21 22 /** 23 * 得到当前正在运行的进程的数量 24 * @param context 25 * @return 26 */ 27 public static int getRunningAppProcessInfoSize(Context context){ 28 29 ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 30 return am.getRunningAppProcesses().size(); 31 } 32 33 /** 34 * 得到当前系统的可用内存 35 * @param context 36 * @return 37 */ 38 public static long getAvailMem(Context context){ 39 40 ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 41 android.app.ActivityManager.MemoryInfo outInfo = new android.app.ActivityManager.MemoryInfo(); 42 am.getMemoryInfo(outInfo); 43 long availMem = outInfo.availMem; 44 return availMem; 45 } 46 47 48 /** 49 * 得到进程所有的信息 50 * @param context 51 * @return 52 */ 53 public static List<TaskInfo> getTaskInfos(Context context){ 54 55 List<TaskInfo> taskInfos = new ArrayList<TaskInfo>(); 56 57 PackageManager pm = context.getPackageManager(); 58 ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 59 List<RunningAppProcessInfo> runningAppProcesses = am.getRunningAppProcesses(); 60 for (RunningAppProcessInfo info : runningAppProcesses) { 61 62 TaskInfo taskInfo = new TaskInfo(); 63 64 String packageName = info.processName; 65 taskInfo.setPackageName(packageName); 66 try { 67 ApplicationInfo appInfo = pm.getApplicationInfo(packageName, 0); 68 Drawable task_icon = appInfo.loadIcon(pm); 69 String task_name = appInfo.loadLabel(pm).toString(); 70 if(task_icon == null){ 71 // 系统应用有的可能没有图标 设置一个默认的图标 72 taskInfo.setTask_icon(context.getResources().getDrawable(R.drawable.ic_launcher)); 73 }else{ 74 taskInfo.setTask_icon(task_icon); 75 } 76 taskInfo.setTask_name(task_name); 77 78 } catch (NameNotFoundException e) { 79 // TODO Auto-generated catch block 80 e.printStackTrace(); 81 taskInfo.setTask_icon(context.getResources().getDrawable(R.drawable.ic_launcher)); 82 taskInfo.setTask_name(packageName); 83 } 84 85 int pid = info.pid; 86 taskInfo.setPid(pid); 87 88 MemoryInfo[] memoryInfos = am.getProcessMemoryInfo(new int[]{pid}); 89 MemoryInfo memoryInfo = memoryInfos[0]; 90 long totalMem = memoryInfo.getTotalPrivateDirty(); //总内存 KB单位 91 taskInfo.setTask_memeory(totalMem); 92 93 taskInfos.add(taskInfo); 94 } 95 96 return taskInfos; 97 } 98 99 /** 100 * 获取手机的总内存 101 * @param context 102 * @return 103 */ 104 public static long getTotalRam(Context context){ 105 106 try { 107 File file = new File("/proc/meminfo"); 108 FileInputStream fis = new FileInputStream(file); 109 BufferedReader br = new BufferedReader(new InputStreamReader(fis)); 110 String totalRam = br.readLine(); 111 StringBuffer sb = new StringBuffer(); 112 char[] cs = totalRam.toCharArray(); 113 for (char c : cs) { 114 if(c>='0' && c<='9'){ 115 sb.append(c); 116 } 117 } 118 long result = Long.parseLong(sb.toString())*1024; 119 return result; 120 } catch (Exception e) { 121 // TODO Auto-generated catch block 122 e.printStackTrace(); 123 return 0; 124 } 125 126 } 127 }