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 }