获取手机的process进程数量和手机的可用内存与总内存大小

  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 }

 

posted @ 2013-02-25 08:27  My_苦行僧  阅读(1667)  评论(0编辑  收藏  举报